leetcode 448 Find All Numbers Disappeared in an Array

来源:互联网 发布:大数据的4v特征 编辑:程序博客网 时间:2024/06/05 10:22

Problem:
给一个数组,数组中包含大小为1~n(数组的大小)的数,问有哪一个数没有包含到当中?
Solution:
先把所有的数放在应该有的位置上,然后再遍历一次看谁的位置上不是它应有的数。

//Solution1://将负数当做一个标志位,这样可以只遍历两次,不需要一条龙式的遍历。class Solution {public:    vector<int> findDisappearedNumbers(vector<int>& nums) {        vector<int> ret;        for(int i = 0; i < nums.size(); i++) {            int val = abs(nums[i]) - 1;            if(nums[val] > 0) {                nums[val] = -nums[val];            }        }        for(int i = 0; i < nums.size(); i++) {            if(nums[i] > 0) {                ret.push_back(i+1);            }        }        return ret;    }};//Solution2://将大于n当做标志位,计算每一位时通过取余恢复class Solution {public:    vector<int> findDisappearedNumbers(vector<int>& nums) {        vector<int> ret;        int n = nums.size();        for (int i = 0; i < nums.size(); i++)            nums[(nums[i]-1) % n] += n;        for (int i = 0; i < nums.size(); i++)            if(nums[i] <= n)                ret.push_back(i+1);        return ret;    }};//Solution3://通过观察每一位是否是原来的值当做标志位class Solution {public:    vector<int> findDisappearedNumbers(vector<int>& nums) {        vector<int> l;        int tmp = -1;        for(int i = 0; i < nums.size(); i++) {            while(nums[i] != i+1) {                if(nums[i] == tmp) {                    tmp = -1;                    break;                }                else {                    tmp = nums[i];                    nums[i] = nums[nums[i]-1];                    nums[tmp-1] = tmp;                }            }        }        for(int i = 0; i < nums.size(); i++) {            if(nums[i] != i+1)                l.push_back(i+1);        }        return l;    }};
1 0
原创粉丝点击