题解 | #数组中重复的数字#

// 法一:最笨方法,用set记录遍历过的数字
class Solution1 {
public:
    int duplicate(vector<int>& numbers) {
        unordered_set<int> seen;
        for (int x: numbers) {
            if (seen.count(x)) {
                return x;
            }
            seen.emplace(x);
        }
        return -1;
    }
};

// 法二:因为数字在0~n-1之间,可以让数字在下标的位置上
class Solution {
public:
    int duplicate(vector<int>& number) {
        for (int i = 0; i < number.size(); ++i) {
            while (number[i] != i) {
                if (number[i] == number[number[i]]) {
                    return number[i];
                }
                int tmp = number[number[i]];
                number[number[i]] = number[i];
                number[i] = tmp;
            }
        }
        return -1;
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-24 18:34
点赞 评论 收藏
分享
06-25 09:33
厦门大学 Java
球球别拷打俺了:现在日常估计没啥hc了,等到八月多估计就慢慢有了。双九✌🏻不用焦虑的
投递快手等公司10个岗位
点赞 评论 收藏
分享
07-10 14:08
已编辑
江西农业大学 Java
拒绝无效加班的小学生...:期望3k吗?java这辈子有了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务