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

// 法一:最笨方法,用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;
    }
};
全部评论

相关推荐

Ncsbbss:又想干活又想要工资,怎么什么好事都让你占了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务