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 <= A.length <= 50000
1 <= A[i] <= 1e7
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; } };