题解 | #数组中重复的数字#
数组中重复的数字
http://www.nowcoder.com/practice/6fe361ede7e54db1b84adc81d09d8524
1.思路是,既然题目规定所有数字都在0到n-1的范围内,那其实可以用类似位图的思路来解决。
拿到number[i]之后,去检查对应位图下标的位置是否为0,为0则设置为1,否则直接返回。
例如number[2] == 15,那就检查dp[15] == 1 ? return 15 : dp[15] = 1
public int duplicate (int[] numbers) { // write code here int dp[] = new int[numbers.length]; for (int i = 0; i < numbers.length; i++) { if (dp[numbers[i]] == 0) { dp[numbers[i]] = 1; } else { return numbers[i]; } } return -1; }
public int duplicate (int[] numbers) { // write code here HashSet set = new HashSet(numbers.length); for(int i = 0; i < numbers.length; i++){ if(!set.add(numbers[i])){ return numbers[i]; } } return -1; }