1、描述
1359第 k 个缺失的正整数,给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。
请你找到这个数组里第 k 个缺失的正整数。
示例 1:
输入:arr = [2,3,4,7,11], k = 5
输出:9
解释:缺失的正整数包括 [1,5,6,8,9,10,12,13,…] 。第 5 个缺失的正整数为 9 。
示例 2:
输入:arr = [1,2,3,4], k = 2
输出:6
解释:缺失的正整数包括 [5,6,7,…] 。第 2 个缺失的正整数为 6 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kth-missing-positive-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2、关键字
缺失值,数组
3、思路
枚举,使用一个枚举累加变量pow,每次+1,遍历整个数组,结果会出现在两个地方,第一个是数组中的缺失值,另外一个是数组外的缺失值,
分步寻找
4、notes
5、复杂度
时间:O(N+K)
空间:O(1);
6、code
// pow作为累加的变量,累加的方式与数组元素作比较,
// k用来统计缺失值的个数
class Solution {
public:
int findKthPositive(vector<int>& arr, int k) {
int pow=1; // 初始化一个累加变量,每次 +1
int ans=-1; // 结果
// //第1种情况,在数组内发现
for(int i=0;i<arr.size();i++){ // 遍历整个arr,
if(pow==arr[i]){ // 累加变量 与数组的元素相等,
pow++; // 累加变量 累加
}
else if(pow<arr[i]){ // 累加变量< 数组元素
k--; // 当前pow就是缺失的第一个值,
if(k==0){ // 如果找到了k个,就返回
ans=pow;
return ans;
}
i--; // 当前数组中元素比累加变量大,就接着使用这个元素做比较
pow++; // 使用pow
}
}
if(k){ //第2种情况,在数组外面发现
ans=arr.back()+k;
}
return ans;
}
};