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

Problem: 645. 错误的集合

文章目录

题目描述

思路

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:

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

思路2:

cpp 复制代码
class Solution {
public:
    /**
     * Hash
     * 
     * @param nums Given array
     * @return vector<int>
     */
    vector<int> findErrorNums(vector<int>& nums) {
        vector<int> res(2);
        int n = nums.size();
        unordered_map<int, int> map;
        for (auto& num : nums) {
            map[num]++;
        }
        for (int i = 1; i <= n; ++i) {
            int count = map[i];
            if (count == 2) {
                res[0] = i;
            } else if (count == 0) {
                res[1] = i;
            }
        }
        return res;
    }
};
相关推荐
Keep_Trying_Go5 分钟前
基于无监督backbone无需训练的类别无关目标统计CountingDINO算法详解
人工智能·python·算法·多模态·目标统计
有时间要学习18 分钟前
面试150——第三周
算法·面试
一车小面包25 分钟前
Neo4j中的APOC
算法·neo4j
H_BB35 分钟前
前缀和算法详解
数据结构·算法
聆风吟º44 分钟前
【数据结构手札】时间复杂度详解:概念 | 大O渐进表示法 | 习题
数据结构·算法·时间复杂度·大o渐进表示法
山楂树の2 小时前
买卖股票的最佳时机(动态规划)
算法·动态规划
小O的算法实验室2 小时前
2024年IEEE TMC SCI1区TOP,面向无人机辅助 MEC 系统的轨迹规划与任务卸载的双蚁群算法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
无才顽石3 小时前
什么是数学
算法·数理象
CoderCodingNo3 小时前
【GESP】C++五级真题(数论, 贪心思想考点) luogu-B4070 [GESP202412 五级] 奇妙数字
开发语言·c++·算法
百***58843 小时前
MATLAB高效算法实战技术文章大纲1
人工智能·算法·matlab