题目描述:
输入一个数组,找出其中出现次数超过一半的数字
分析:
1)首先可以想到利用快排的partion算法,对数组进行排序。
那么最后位于数组中间的那个数字一定是所求的结果。这种方法时间复杂度是O(nlgn)
2)采用计数法,时间复杂度只有O(n)
代码:
int moreThanHalf(vector<int>& nums){
if(nums.size()==0) return -1;
int res=nums[0];
int cnt=1;
for(int i=1;i<nums.size();++i){
if(nums[i]==res){
++cnt;
}else{
if(cnt>0) --cnt;
else{ //cnt==0
cnt=1;
res=nums[i];
}
}
}
return res;
}