给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明: 不能更改原数组(假设数组是只读的)。 只能使用额外的 O(1) 的空间。 时间复杂度小于 O(n2) 。 数组中只有一个重复的数字,但它可能不止重复出现一次。算法:抽屉原理,二分
class Solution {
public:
int findDuplicate(vector<
int>&
nums) {
int l=
1,r=nums.size()-
1;
while(l<
r){
int mid=l+r>>
1;
int cnt=
0;
for(auto x:nums){
if(x>=l&&x<=
mid)
cnt++
;
}
if(cnt>mid-l+
1)r=
mid;
else l=mid+
1;
}
return l;
}
};
转载于:https://www.cnblogs.com/programyang/p/11205452.html
相关资源:各显卡算力对照表!