剑指 Offer 03. 数组中重复的数字


思路:把每个数都放在符合规则的位置上。或者是用set,如果出现重复元素就return。
题解:

class Solution {
    public int findRepeatNumber(int[] nums) {
        // 应该待的地方 值为1的放在[1],值为2的放在[2]
        for (int i = 0; i < nums.length; i++) {
            while (nums[i] != i) {
                // 把索引为i的数nums[i]放到他本来应该待的地方[nums[i]]
                int idx = nums[i];//为防止nums[i]变化影响swap()所以用idx记录索引
                // 发现重复数
                if (nums[i] == nums[idx]) return nums[i];
                // swap
                int tmp = nums[i];
                nums[i] = nums[idx];
                nums[idx] = tmp;
            }
        }
        return -1;
    }
}
posted @ 2020-11-17 11:14  New、开始  阅读(56)  评论(0)    收藏  举报