【剑指offer】 数组中重复的数字

  |   0 评论   |   0 浏览

题目

找出数组中重复的数字。

在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

我的答案

/**
 * @param {number[]} nums
 * @return {number}
 */
var findRepeatNumber = function (nums) {
    for (let i = 0; i < nums.length; i++) {
        if (nums[i] !== i) {
            if (nums[nums[i]] === nums[i]) {
                return nums[i];
            } else {
                const tempNum = nums[nums[i]];
                nums[nums[i]] = nums[i];
                nums[i] = tempNum;
                i--;
            }

        }

    }
};

很容易看出题目的用意,数字只在0~n-1之间出现。说明数组的i是可以和数字对上的,为了尽量少的使用内存。我们循环整个数组,让数字和数组的index对上。如果当前数字和index相同,就跳过,如果没有对上,就换到对应的位置上。关键是要对比已有位置上的数字是否和对应index对上,如果有对上,那么就重复了。


标题:【剑指offer】 数组中重复的数字
作者:limanting
地址:https://blog.manxiaozhi.com/articles/2021/08/26/1629977240574.html