用一个数组记录下出现数的次数,如果超过两次就返回这个数
class Solution {
public:
int findDuplicate(vector<int>& nums) {
int arr[100005]={};
for(int i=0;i<nums.size();i++){
arr[nums[i]]++;
if(arr[nums[i]]>1){
return nums[i];
}
}
return 0;
}
};
还是二分答案,除数具有单调性 ,因此可以用二分查找查到最小的除数
class Solution {
public:
int smallestDivisor(vector<int>& nums, int threshold) {
int p=1,q=1000000,ans;
while(p<=q){
int sum=0;
int mid=p+(q-p)/2;
for(int a:nums){
sum+=a/mid;
if(a%mid){
sum++;
}
if(sum>threshold){
break;
}
}
if(sum<=threshold){
ans=mid;
q=mid-1;
}
else{
p=mid+1;
}
}
return ans;
}
};