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

数组中重复的数字

https://www.nowcoder.com/practice/6fe361ede7e54db1b84adc81d09d8524

class Solution {
public:
    int duplicate(vector<int>& numbers) {
        // 类似原地哈希的思想
        // 所有数字都在0到n-1的范围内,这就是可以采用下标来做哈希表的暗示
        int i = 0;
        int n = numbers.size();
        while (i < n) {
            if (numbers[i] < 0 || numbers[i] > n) break;
            if (numbers[i] == i) {
                i++;
                continue;
            } else {
                // 如果 numbers[i] != i,那么numbers[i]理应出现在下标 i = numbers[i]处
                if (numbers[i] == numbers[numbers[i]]) {
                    return numbers[i];
                } else {
                    swap(numbers[i], numbers[numbers[i]]);
                }
            }
        }
        return -1;
    }
};

全部评论

相关推荐

在笔试的大西瓜很矫健:校招数分不用想了,这经历和学历都不够用,大厂更别想,初筛都过不了,说点不好听的小厂数分都进不去(小厂也是假数分),要两个对口实习+3个项目(或者3+2),而且要有含金量才能补一点你的学历劣势。 建议刷实习,社招找数分,校招看运气,能入行业就行,可以运营转数分
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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