题目描述
倒是和leetcode 287 寻找重复数很像。。但是不能使用那道题的快慢指针法(也可能是我太菜了) 重点在于题干的描述【长度为 n 的数组,数字范围【0 ~ n - 1】
思路 & 代码
class Solution { public int findRepeatNumber ( int [ ] nums) { Set < Integer > hashset = new HashSet < > ( ) ; for ( int i : nums) { if ( hashset. contains ( i) ) { return i; } hashset. add ( i) ; } return - 1 ; }
}
class Solution { public int findRepeatNumber ( int [ ] nums) { for ( int i = 0 ; i < nums. length; i++ ) { while ( nums[ i] != i) { if ( nums[ nums[ i] ] == nums[ i] ) { return nums[ i] ; } int temp = nums[ nums[ i] ] ; nums[ nums[ i] ] = nums[ i] ; nums[ i] = temp; } } return - 1 ; }
}
二刷
哟,用了个新方法! 不过还是会稍微慢一点(毕竟跑两次) 但是很好理解:数值出现一次,就对对应下标的存储值加长度,加了两次以上就说明重复。
class Solution { public int findRepeatNumber ( int [ ] nums) { for ( int temp : nums) { nums[ temp % nums. length] += nums. length; } for ( int i = 0 ; i < nums. length; i++ ) { if ( nums[ i] >= 2 * nums. length) { return i; } } return - 1 ; }
}