最近在刷力扣的每日一题,最为菜鸡,感觉难度还好。
今天的题:在一列长度为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;
}
};