Leetcode 刷题记录

Posted hopelee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 刷题记录相关的知识,希望对你有一定的参考价值。

645. Set Mismatch

The set S originally contains numbers from 1 to n. But unfortunately, due to the data error, one of the numbers in the set got duplicated to another number in the set, which results in repetition of one number and loss of another number.

Given an array nums representing the data status of this set after the error. Your task is to firstly find the number occurs twice and then find the number that is missing. Return them in the form of an array.

Example 1:

Input: nums = [1,2,2,4]
Output: [2,3]

 

Note:

  1. The given array size will in the range [2, 10000].
  2. The given array‘s numbers won‘t have any order.

解题思路:

  1. 将出现过的数字所对应数组中位置上的数字改写为负数,如果第二次访问到一个负数,说明当前位置对应的数字出现重复。

  2. 顺序遍历数组,如果某个位置上的数不为负数,说明这个数字不存在。

刷题记录:

  1. 一刷,使用比较复杂的方法做的,而且出现BUG

技术分享图片
class Solution {
public:
    vector<int> findErrorNums(vector<int>& nums) {
        vector<int> ret(2, 0);
        for (int num : nums) {
            if (nums[abs(num) - 1] < 0) {
                ret[0] = abs(num);
            } else {
                nums[abs(num) - 1] = -nums[abs(num) - 1];
            }
        }
        for (int i = 0; i < nums.size(); i++) {
            if (nums[i] > 0) {
                ret[1] = i + 1;
                break;
            }
        }
        return ret;
    }
};
View Code

646. Maximum Length of Pair Chain

You are given n pairs of numbers. In every pair, the first number is always smaller than the second number.

Now, we define a pair (c, d) can follow another pair (a, b) if and only if b < c. Chain of pairs can be formed in this fashion.

Given a set of pairs, find the length longest chain which can be formed. You needn‘t use up all the given pairs. You can select pairs in any order.

Example 1:

Input: [[1,2], [2,3], [3,4]]
Output: 2
Explanation: The longest chain is [1,2] -> [3,4]

 

Note:

  1. The number of given pairs will be in the range [1, 1000].

解题思路:

  1. 思路与最长递增子序列的方式近似,不同的是在连接pair链时,需要存储的尾部数字为后部分数字,需要比较的数字为前一个数字。使用二分查找比较,最后根据high的值决定拓展长度还是更改下一链的长度。

刷题记录:

  1. 一刷,BUG FREE

技术分享图片
class Solution {
public:
    int findLongestChain(vector<vector<int>>& pairs) {
        sort(pairs.begin(), pairs.end(), less<vector<int>>());
        vector<int> minTail;
        for (int i = 0; i < pairs.size(); i++) {
            int target = pairs[i][0];
            int low = 0, high = static_cast<int>(minTail.size()) - 1;
            while (low <= high) {
                int mid = low + (high - low) / 2;
                if (target > minTail[mid]) {
                    low = mid + 1;
                } else {
                    high = mid - 1;
                }
            }
            if (high + 1 < minTail.size()) {
                minTail[high + 1] = min(minTail[high + 1], pairs[i][1]);
            } else {
                minTail.push_back(pairs[i][1]);
            }
        }
        return minTail.size();
    }
};
View Code

 

以上是关于Leetcode 刷题记录的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题笔记-数据结构-day7

LeetCode刷题笔记-数据结构-day7

Leetcode刷题Python LeetCode 2038. 如果相邻两个颜色均相同则删除当前颜色

leetcode刷题记录

Leetcode刷题记录[python]——344 Reverse String

LeetCode刷题记录(python3)