给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。
假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。
。
JAVA(快排):
class Solution {
public int findDuplicate(int[] nums) {
int res=0;
QuickSort(nums,0,nums.length-1);
for(int i=1;i<nums.length;i++){
if(nums[i]==nums[i-1]){
res=nums[i];
break;
}
}
return res;
}
public void QuickSort(int[] nums,int low,int high){
if(low<high){
int pivotpos=Partition(nums,low,high);
QuickSort(nums,low,pivotpos-1);
QuickSort(nums,pivotpos+1,high);
}
}
public int Partition(int[] nums,int low,int high){
int pivot=nums[low];
while(low<high){
while(low<high&&nums[high]>=pivot) --high;
nums[low]=nums[high];
while(low<high&&nums[low]<=pivot) ++low;
nums[high]=nums[low];
}
nums[low]=pivot;
return low;
}
}
JAVA:
注:空间复杂度O(n)
class Solution {
public int findDuplicate(int[] nums) {
int[] res=new int[nums.length];
for(int i=0;i<nums.length;i++){
res[nums[i]]++;
}
for(int i=0;i<nums.length;i++){
if(res[i]>1)
return i;
}
return res[0];
}
}