这个题作者就当作是练习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;}
};