2019 力扣杯-全国高校春季编程大赛 有序数组中的缺失元素

给出一个有序数组 A,数组中的每个数字都是 独一无二的,找出从数组最左边开始的第 K 个缺失数字。

示例 1:

输入:A = [4,7,9,10], K = 1
输出:5
解释:
第一个缺失数字为 5 。

示例 2:

输入:A = [4,7,9,10], K = 3
输出:8
解释: 
缺失数字有 [5,6,8,...],因此第三个缺失数字为 8 。

示例 3:

输入:A = [1,2,4], K = 3
输出:6
解释:
缺失数字有 [3,5,6,7,...],因此第三个缺失数字为 6 。

提示:

  1. 1 <= A.length <= 50000
  2. 1 <= A[i] <= 1e7
  3. 1 <= K <= 1e8

没啥好说的。注意超过数组最大值的就不要去遍历了。直接算!

这题的正解应该也是直接算的。。

class Solution {
public:
    int missingElement(vector<int>& nums, int k) {
        int mx = 0;
        int mi = nums[0];
        set<int> Se;
        for (int num : nums) {
            Se.insert(num);
            mx = max(mx, num);
        }
        int pos = 0;
        int num = 0;
        int cnt = mx - mi + 1 - nums.size();
        if(k<=cnt){
            for (int i = mi; i <= mx; ++i) {
                if (!Se.count(i)){
                    num++;
                    if(num == k){
                        return i;
                    }
                }
            }
        }      
        return mx+k-cnt;
    }
};

猜你喜欢

转载自www.cnblogs.com/yinghualuowu/p/10746626.html
今日推荐