14. 不修改数组找出重复的数字难度: 一般 / 知识点: 抽屉原理 二分
Posted 辉小歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了14. 不修改数组找出重复的数字难度: 一般 / 知识点: 抽屉原理 二分相关的知识,希望对你有一定的参考价值。
第一种方法: 开了map计数,多用了空间,map: logn,时间复杂度O(nlogn)
class Solution {
public:
int duplicateInArray(vector<int>& nums)
{
map<int,int>mp;
for(int i=0;i<nums.size();i++)
{
mp[nums[i]]++;
if(mp[nums[i]]>1) return nums[i];
}
}
};
第二种方法: 抽屉原理,二分,时间复杂度O(nlogn)
class Solution {
public:
int duplicateInArray(vector<int>& nums)
{
int l=1,r=nums.size()-1;// 数的取值范围
while(l<r)
{
int mid=l+r>>1;
int s=0;
for(int i=0;i<nums.size();i++) if(nums[i]>=l&&nums[i]<=mid) s++;
if(s>mid-l+1) r=mid;//说明左边多放了
else l=mid+1;
}
return l;
}
};
以上是关于14. 不修改数组找出重复的数字难度: 一般 / 知识点: 抽屉原理 二分的主要内容,如果未能解决你的问题,请参考以下文章