小工具知识网

当前位置: 首页 > 行业知识 > 力扣645. 错误的集合(排序,哈希表)

行业知识

力扣645. 错误的集合(排序,哈希表)

2026-11-05 05:22:26 来源:互联网转载

Problem: 645. 错误的集合

文章目录

  • 题目描述
  • 思路
  • 复杂度
  • Code

    题目描述

    思路

    1.排序

    1.对nums数组按从小到大的顺序排序;

    2.遍历数组时若判断两个相邻的元素则找到重复元素;

    3.记录一个整形变量prev一次置换当前位置元素并与其作差,若差等于2着说明缺失的数即为这中间的一个数(由于缺失的数可能是1,则初始化prev为0)

    4.由于nums中本该记录1-n,则若nums[n - 1] != n,则说明缺失的数是n;

    2.哈希表

    1.对nums中的元素进行统计(以其大小为键,出现的次数为值);

    2.从1-n开始遍历,若某一个值出现2次则为重复元素,若一个值没有出现(其值为0)则为缺失值

    复杂度

    思路1:

    时间复杂度:

    O ( n l o g n ) O(nlogn) O(nlogn);其中 n n n为数组nums的大小

    空间复杂度:

    O ( n ) O(n) O(n)

    思路2 :

    时间复杂度:

    O ( n ) O(n) O(n)

    空间复杂度:

    O ( n ) O(n) O(n)

    Code

    思路1:

    class Solution {public:    /**     * Sort     *      * @param nums Given array     * @return vector     */    vector findErrorNums(vector& nums) {        int n = nums.size();        vector res(2);        sort(nums.begin(), nums.end());        int prev = 0;        for (int i = 0; i  1) {                res[1] = prev + 1;            }            prev = curr;        }        if (nums[n - 1] != n) {            res[1] = n;        }        return res;    }};

    思路2:

    class Solution {public:    /**     * Hash     *      * @param nums Given array     * @return vector     */    vector findErrorNums(vector& nums) {        vector res(2);        int n = nums.size();        unordered_map map;        for (auto& num : nums) {            map[num]++;        }        for (int i = 1; i             int count = map[i];            if (count == 2) {                res[0] = i;            } else if (count == 0) {                res[1] = i;            }        }        return res;    }};

上一篇:无影服务器怎么登录抖店?

下一篇:ps镜头光晕怎么做?