码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 刷题记录(4)

时间:2018-02-04 21:00:35      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:递增   put   length   inpu   sort   desc   cto   closed   error   

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 刷题记录(4)

标签:递增   put   length   inpu   sort   desc   cto   closed   error   

原文地址:https://www.cnblogs.com/hopelee/p/8413844.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!