leetcode 1539.第k个缺失的正整数
这个题作者就当作是练习C++的STL容器来做的,也就是暴力硬解吧。
思路:按照数据范围,我们再创造一个全集,利用差集的概念来求出来arr所没有的元素,放到结果数组里面,然后再对位置进行筛选。
注意:这里的位置可能会超过数组的数目,所以当超过数组数目的时候,一定就是在1000之外的数了(这是根据数据范围来判断的),所以需要用想知道的位置数减去个数组的数目再加上1000,因为这些数字都是严格递增的。
set_difference函数就是用来求出两个数组中,后者数组在前者数组中没有的元素。
class Solution {
public:
int findKthPositive(vector<int>& arr, int k) {
vector<int>s(1000);
int y=0;
for(int i=1;i<=1000;i++)
s[y++]=i;
vector<int>res(1000);
auto it=set_difference(s.begin(),s.end(),arr.begin(),arr.end(),res.begin());
res.resize(it-res.begin());
int haha=res[k-1];
if(res.size()<k)
haha+=1000+k-res.size();
return haha;
}
};