標籤:others do it 遍曆 with number tmp and abs 標記
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 that do not appear in this array.
Could you do it without extra space and in O(n) runtime? You may assume the returned list does not count as extra space.
Example:
Input:[4,3,2,7,8,2,3,1]Output:[5,6]
思路:給出長度為n的數組,遍曆所有元素,找出沒有出現過的元素。基本思想是我們將元素值作為下標遍曆輸入數組並標記為負值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++){int val = abs(nums[i]) - 1;//nums[i]是所有元素值,val是下標,將元素值出現的下標的元素標記為負值,減1的意思是下標比個數少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);}return tmp;}
比如4個元素的數組裡出現了2,3,那麼下標為2,3的元素標為負值,剩下的1,4沒有出現,那麼仍為正值,找到正值的下標也就是結果了。
[Array]448. Find All Numbers Disappeared in an Array