【剑指offer】 数组中重复的数字
题目
找出数组中重复的数字。
在一个长度为 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