448. Find All Numbers Disappeared in an Array

题目:含有从1~n(数组size)数值的数组,里面存在重复元素,求缺掉的数字。

要求:不使用多余辅助空间,时间复杂度为(n)的算法

方法:

利用  原数组index  一一对应  所求连续数列的数值  的特点,

顺次遍历数组的同时,遇到某个值,使用正负号来标记已遇到。

最后在遍历一次,没遇到过的(即所求缺掉的)就是没有标记过的(正数)。

 

注意:由于要使用数值去表示index,而遍历过的,会将数值转为负数,

因此,在利用数值表示index之前,先取绝对值abs

 

参考代码:

 1 class Solution {
 2 public:
 3     vector<int> findDisappearedNumbers(vector<int>& nums) {
 4         vector<int> res;
 5         for(int i=0; i<nums.size(); i++){
 6             int m = abs(nums[i]) -1;
 7             if(nums[m]>0){
 8                 nums[m] = -nums[m];
 9             }
10         }
11         for(int i=0; i<nums.size(); i++){
12             if(nums[i]>0) res.push_back(i+1);
13         }
14         return res;
15     }
16 };

 

posted @ 2020-03-01 15:20  habibah_chang  阅读(101)  评论(0编辑  收藏  举报