题解 | 数组中重复的数字

数组中重复的数字

https://www.nowcoder.com/practice/6fe361ede7e54db1b84adc81d09d8524?tpId=265&tqId=39207&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26tpId%3D13%26type%3D265&difficulty=undefined&judgeStatus=undefined&tags=&title=

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param numbers int整型vector 
     * @return int整型
     */
    int duplicate(vector<int>& numbers) {
        // write code here
        //1.hash表
        // if(numbers.size()>10000||numbers.size()<=0){
        //     return -1;
        // }
        // unordered_map<int,int> MyMap;
        // for(auto num : numbers){
        //     MyMap[num]++;
        //     if(MyMap[num]>=2){
        //         return num;
        //     }
        // }
        // return -1;

        //2.每次子循环保证一部分元素的键==值
        //官方题解:https://blog.nowcoder.net/n/785481bddaf848b2bc138af3298aa236
        for(int i = 0; i < numbers.size(); i++){
            //该位置本来就是对的
            if(numbers[i] == i)
                continue;
            //位置不对,需要换到自己对应的位置
            else{
                //对应位置相等,重复
                if(numbers[i] == numbers[numbers[i]])
                    return numbers[i];
                //交换位置
                else{
                    swap(numbers[i], numbers[numbers[i]]);
                  	i--;
                }
            }
        }
        //没有重复
        return -1;
    }
};









全部评论

相关推荐

阿武同学:基本信息保留前面三行,其他的可以全部删掉,邮箱最重要的你没写,主修课程精简到8个以内,实习里面2/3/4都是水内容的,非要写的话建议两到三句话,项目经历排版优化下,自我评价缩到三行
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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