Leetcode169. 多数元素(JAVA摩尔投票法)

Posted !0 !

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode169. 多数元素(JAVA摩尔投票法)相关的知识,希望对你有一定的参考价值。

题目链接:https://leetcode-cn.com/problems/majority-element/

解题思路

这种做法应该是专门针对这题的,很巧妙。思路是这样的,我们先用ans代表备选人,x代表备选人的票数,如果等于0就要换下一个备选人(注意:下一个备选人也有可能是之前选过的备选人),由于最终答案肯定是大于一半的元素,所以最后肯定能选出答案。

代码

class Solution {
    public int majorityElement(int[] nums) {
        int ans = 0, x = 0; //ans代表备选人,x代表备选人的票数
        for(int i = 0; i < nums.length; i++) {  
            if(x == 0)  //如果当前备选人为0票,肯定就是没有备选人,直接找新备选人
                ans = nums[i];  //更新备选人
            x += ans == nums[i] ? 1 : -1;   //如果当前投的不是备选人,则x减一;是投的备选人,x加一
        }
        return ans; 
    }
} 

复杂度分析

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

以上是关于Leetcode169. 多数元素(JAVA摩尔投票法)的主要内容,如果未能解决你的问题,请参考以下文章

[E摩尔投票] lc169. 多数元素(多数投票算法+经典)

169. 多数元素 - 摩尔投票法

LeetCode 169. 多数元素c++/java详细题解

LeetCode 169. 多数元素c++/java详细题解

LeetCode-169. 多数元素(java)

LeetCode(算法)- 169. 多数元素