力扣力扣力扣!(01-摩尔投票法)

£可爱£侵袭症+ 提交于 2020-03-17 09:51:56

最近在刷力扣的每日一题,最为菜鸡,感觉难度还好。
今天的题:在一列长度为n的 数组 中找到一个出现次数大于于[n/2]的数(默认有)
今天看到了摩尔投票法感觉比自己想的要快。
(p.s. :哪个排列取中间我就不看了,毕竟是算法题,而且反正都需要遍历一遍)
—————————————————————————
摩尔投票法 是一种抵消的思想
1.有([n/2]+?)个相同数,则在与其他数一一相消的条件下,这个相同数一定会有剩余。
2.由上,所有数“大混战”剩余的数一定是那个数量大于于[n/2]的数(相同的数字不消除!!!)

算法想法:
1.认为第一个就是所求的数,并且计数为1
2.下个数相同->计数加一|下个数不同->计数减一
3.判断 计数为0时换数

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int ticket=0,num=0;
        for(int i=0;i<nums.size();i++){
            if(ticket==0){
                num=nums[i];
                ticket++;
            }
            else{
                num==nums[i]?ticket++:ticket--;
            }
        }
        return num;
    }
};
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!