这个问题意思是 从1到n(n为数组中的最大项)中找出数组中不包含的数。
我的思路是用数组中含有的数如a,将数值第a位既array【a】变为负数,那么数组经过变换后,哪一位的数还是正数,那么该位的下标加一就是不在数组中的。
如 4 2 2 3 8 7 3 1
变换后是 -4 -2 -2 -3 8 7 -3 -1
这第五位和第六位(下标分别是4 、5)为正,那么5、6就不存在改数组中。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> unappearNum(vector<int> &nums){
vector<int> unappearNum;
int len = nums.size();
for(int i=0;i<len;i++){
int m = abs(nums[i])-1; // index start from 0
nums[m] = nums[m]>0 ? -nums[m] : nums[m];
}
cout<<endl;
for(int i=0;i<len;i++){
if(nums[i]>0) unappearNum.push_back(i+1);
}
return unappearNum;
}
int main(){
vector<int> a ;
for(int i=0;i<8;i++){
int num;
cin>>num;
a.push_back(num);
}
vector<int> v = unappearNum(a);
cout<<"[";
for(int i=0;i<v.size();i++){
if(i!=v.size()-1){
cout<<v[i]<<",";
}
else if(i==v.size()-1){
cout<<v[i];
}
}
cout<<"]"<<endl;
return 0;
}