栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode 442 数组中重复的数据[哈希表] HERODING的LeetCode之路

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode 442 数组中重复的数据[哈希表] HERODING的LeetCode之路

解题思路:
第一种方法是最耗费时间空间的方法,哈希表法,用哈希表存储数字的个数,最后返回个数为2的结果,代码如下:

class Solution {
public:
    vector findDuplicates(vector& nums) {
        unordered_map mp;
        for(auto& num : nums) {
            mp[num] ++;
        }
        vector res;
        for(auto& [a, b] : mp) {
            if(b == 2) {
                res.emplace_back(a);
            }
        }
        return res;
    }
};

但是上述方法显然是不满足常数额外空间的要求的,也没利用上长度为n,范围为[1,n]的条件,既然题中给定了这些条件,那么不如将每个位置i的值num与位置num-1对应,将出现一次,就将num-1位置标记为负数,表明出现了一个,只要再次出现判断对应位置是否为负即可,代码如下:

class Solution {
public:
    vector findDuplicates(vector& nums) {
        vector res;
        for(int i = 0; i < nums.size(); i ++) {
            int num = abs(nums[i]);
            if(nums[num - 1] > 0) {
                nums[num - 1] *= -1;
            } else {
                res.emplace_back(num);
            }
        }
        return res;
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/866899.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号