题解 | #数组中出现次数超过一半的数字#

数组中出现次数超过一半的数字

http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163

class Solution {
public:
    //投票算法(候选人算法)
    //算法思想如下:如果每次从数组中挑选出来两个数,如果这两个数不相同则直接去除这两个数
    ///如果相同则这种数的个数加2
    //那么最后这个数组中剩下的一定就是出现次数最多的数(前提是有一种数出现次数超过了一半)
    int MoreThanHalfNum_Solution(vector<int> numbers) {
    //初始时假设numbers[0]就是候选人即出现次数最多的数
        int candidate=-1,count=0;//候选人是谁,现在有多少个票数
        int n=numbers.size();
        for(int i=0;i<n;i++){
            if(count==0){//当没有候选人时,挑选当前数成为候选人
                candidate=numbers[i];
                count=1;
            }
            else if(numbers[i]==candidate)//当前数和候选人相同时,票数加1
                count++;
            else{//不同时票数减1
                count--;
            }
        }
        return candidate;
    }
};
全部评论

相关推荐

LuvSran:是人我吃。老师就是学校呆久了,就业方面啥都不懂,还自以为是为了我们就业好。我学校就一破双非,计科入行率10%都没有,某老师还天天点名,说是出勤率抬头率前排率高了,华为什么的大厂就会来,我们就是不好好上课才没有厂来招。太搞笑了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务