標籤:you amp log back 個數 output 應該 數字 logs
448. Find All Numbers Disappeared in an Array
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]
思路:數組出現一個數,就在它本應該出現的位置標記(把此位置上的數設定為相反數),如果再出現相同的數,由於已經是負值了,就不再改變。全部標記後,重新掃描數組,未被標記的位置對應一個沒有出現過的數(注意:位置 = 數字 - 1)
1 class Solution { 2 public: 3 vector<int> findDisappearedNumbers(vector<int>& nums) { 4 int len = nums.size(); 5 vector<int> res; //returned list 6 for (int i = 0; i < len; i++) { 7 int index = abs(nums[i]) - 1; 8 if (nums[index] > 0) { 9 nums[index] *= -1;10 }11 }12 13 for (int i = 0; i < len; i++) {14 if (nums[i] > 0) {15 res.push_back(i + 1);16 }17 }18 19 return res;20 }21 };
448. Find All Numbers Disappeared in an Array