[LeetCode]645. Set Mismatch

来源:互联网 发布:phpstorm php配置 编辑:程序博客网 时间:2024/05/18 09:05

[LeetCode]645. Set Mismatch

题目描述

这里写图片描述

思路

简单粗暴的方法,用哈希表统计即可

优化
1-n之间的数,只有一个重复,那么可以不消耗额外空间,在原数组做标记,1-n的数对应访问数组下标,访问过的数组元素就置负,当访问到的元素已经是负数时,说明当前当做下标的数是第二次出现了
再次遍历数组,经过一轮标记后元素值仍为正数的数的下标对应的数,就是缺失的数了

代码

#include <iostream>#include <vector>#include <algorithm>using namespace std;class Solution {public:    vector<int> findErrorNums(vector<int>& nums) {        vector<int> res;        for (int i = 0; i < nums.size(); ++i) {            if (nums[abs(nums[i]) - 1] > 0) nums[abs(nums[i]) - 1] = -nums[abs(nums[i]) - 1];            else res.push_back(abs(nums[i]));        }        for (int i = 0; i < nums.size(); ++i) {            if (nums[i] > 0) {                res.push_back(i + 1);                break;            }        }        return res;    }};int main() {    vector<int> nums = { 1,2,2,4 }, res;    Solution s;    res = s.findErrorNums(nums);    for (int num : res) cout << num << " ";    cout << endl;    system("pause");    return 0;}
原创粉丝点击