1. 程式人生 > >[Array]448. Find All Numbers Disappeared in an Array

[Array]448. Find All Numbers Disappeared in an Array

isa where xtra style 基本思想 我們 tput hat ice

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的意思是下標比個數少1
if(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