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. 多数元素(多数投票算法+经典)
LeetCode 169. 多数元素c++/java详细题解