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

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

难度:简单

problem

找出数组中重复的数字。

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

示例:

输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3 

solution

  1. brute force,这里注意两个指针不能同时移动到同一个index。
  2. 开一个对象,由于数组元素都是从0到length-1的数,故而可以将元素作为对象的key,每遍历一个元素就查看对象中对应的key的value是否存在,如果不存在则将其value置为1,若果存在则返回该key。

code

  1. 暴力
js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* @param {number[]} nums
* @return {number}
*/
var findRepeatNumber = function(nums) {
const n = nums.length;

for (let i = 0; i < n; i++) {
for (let j = 1; j < n; j++) {
if (i != j && nums[i] == nums[j]) {
return nums[i];
}
}
}
};
  1. 利用对象
js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* @param {number[]} nums
* @return {number}
*/
var findRepeatNumber = function(nums) {
const n = nums.length;
let obj = {};

for (let i = 0; i < n; i++) {
if (obj[nums[i]] != undefined) {
return nums[i];
} else {
obj[nums[i]] = 1;
}
}
};

ref

  1. 题目全都来自leetcode上的《剑指offer》。

评论