摩尔投票法

109 阅读1分钟

169. 多数元素

分析

  • 题目要求找出一个出现次数大于数组长度一半的元素,而且要求o(n)时间,o(1)空间
  • 显然一般解法满足不了题目的时间和空间上的要求,需采用妙解,结合题目的n/2,其实可以采用摩尔投票法
  • 摩尔投票法
    • 选取首元素,初始化票数为1
    • 从第二个元素开始遍历元素
      • 若相同则票数加1
      • 不同则减1,减到0了要重新选举当前元素,并置票数为1
class Solution {
    public int majorityElement(int[] nums) {
        int ans=nums[0],ticket=1;
        for(int i=1;i<nums.length;i++){
            if(nums[i]==ans)
                ticket++;
            else{
                if(--ticket==0){
                    ans=nums[i];
                    ticket=1;
                }
            }
        }
        return ans;
    }
}