概述
Lintcode
主要思想就是,先给一个数组排序,然后循环遍历整个数组,当前一个与后一个相等,sum++;不然sum变为0.当sum>=((num/2)+1)的时候循环终止就好了嘛。
这个题有一个情况,就是给定的数组一定是一个符合要求的数组,即一定有主元素,设计情况的时候没有考虑他没有主元素的情况。
如果给定的数组没有主元素的话,应该在if(sum>=((num/2)+1))这句话加一个else,return false,即如果没有一个元素的sum严格大于一半的数组长度的话,返回FALSE。
int majorityNumber(vector<int> &nums) {
// write your code here
sort(nums.begin(),nums.end());
int num=nums.size();
int sum=1;
int ans=0;
for(int i=0;i<num;i++){
if(nums[i]==nums[i+1]){
sum++;
ans=nums[i];
}
else
sum=1;
if(sum>=((num/2)+1))
break;
}
return ans;
}
int majorityNumber(vector<int> nums) {
int candidate, count = 0;
for (int i = 0; i < nums.size(); i++) {
if (count == 0) {
candidate = nums[i];
count ++;
} else {
if (candidate == nums[i]) {
count ++;
} else {
count --;
}
}
}
return candidate;
}
参考答案:
主元素在数组中出现的次数最多,严格超过了一半,所以不论怎么减,主元素的count一定是大于0的,即在有主元素的情况下,最后剩下的那个一定就是主元素。想法还是很好的,比较巧妙。
最后
以上就是落寞毛巾为你收集整理的Lintcode主元素问题Lintcode的全部内容,希望文章能够帮你解决Lintcode主元素问题Lintcode所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复