Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.app
Find all the elements of [1, n] inclusive that do not appear in this array.this
Could you do it without extra space and in O(n) runtime? You may assume the returned list does not count as extra space.spa
Example: Input: [4,3,2,7,8,2,3,1] Output: [5,6]
問題的關鍵是利用1->n的數字和總長度n的對應關係!!
不用額外空間進行記錄出現過的數字方式 =>
用出現的位置正負來記錄!! 思路很巧妙code
class Solution { public: vector<int> findDisappearedNumbers(vector<int> &nums) { vector<int> res; for (int i = 0; i < nums.size(); ++i) { int idx = abs(nums[i]) - 1; nums[idx] = nums[idx] > 0 ? -nums[idx] : nums[idx]; } for (int i = 0; i < nums.size(); ++i) if (nums[i] > 0) res.push_back(i+1); return res; } };
相似的問題還有"找出重複數字","找出惟一不重複數字"ip