Find the disappear numbers in a array

来源:互联网 发布:现货原油手机行情软件 编辑:程序博客网 时间:2024/05/19 21:15

这个问题意思是 从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;}

0 0
原创粉丝点击