class Solution {
public int findRepeatNumber(int[] nums) {
//1.利用map直接找出来或者set
// Map<Integer,Integer> map = new HashMap<>();
// for(int i = 0; i < nums.length; i++){
// //进行判断是否有重复
// if(map.get(nums[i])!=null){
// return nums[i];
// }else{
// map.put(nums[i],1);
// }
// }
// return 0;
//第二种 先进行排序 然后进行查找重复
// Arrays.sort(nums);
// for(int i = 0;i < nums.length - 1;i++){
// if(nums[i] == nums[i+1]){
// return nums[i];
// }
// }
// return 0;
//第三种进行查询异或的操作
int i = 0;
while(i < nums.length) {
if(nums[i] == i) {
i++;
continue;
}
if(nums[nums[i]] == nums[i]) return nums[i];
int tmp = nums[i];
nums[i] = nums[tmp];
nums[tmp] = tmp;
}
return -1;
}
}
虽然是简单的问题,但是算法一般是以时间复杂度和空间复杂度来评判好与坏。