Given an array of integers where 1≤a[i]≤ n (n = size of array), some elements appear twice and others Appear once.
Find all the elements of [1, N] inclusive The does not appear in this array.
Could do it without extra space and in O (n) runtime? Assume the returned list does not count as extra space.
Example:
input:[4,3,2,7,8,2,3,1]output:[5,6]
Idea: Give an array of length n, traverse all the elements, and find the elements that are not there. The basic idea is that we traverse the input array as subscript and mark it as a negative value num[i] =-num[i].
vector<int> Finddisappear (vector<int>&nums) {Vector<int>tmp;size_t N=nums.size (); for(size_t i =0; I < n; i++){intval = ABS (Nums[i])-1;//nums[i] is the value of all elements, Val is subscript, the element value appears in the subscript element is marked as negative, minus 1 means less than the number of subscript 1if(Nums[val] >0) Nums[val]= -nums[val];} for(size_t i =0; I < n; i++){if(Nums[i] >0) Tmp.push_back (i+1);}returntmp;}
For example, 4 elements of the array appears 2, 3, then the subscript 2,3 element is marked as negative, the remaining 1,4 does not appear, then is still positive, to find a positive subscript is the result.
[array]448. Find all Numbers disappeared in an Array