题目
leetCode 第 169 题,多数元素
关联类型:数组
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入:[3,2,3]
输出:3
示例 2:
输入:[2,2,1,1,1,2,2]
输出:2
进阶:
尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。
做题时间
class Solution {
public int majorityElement(int[] nums) {
}
}
以上给出方法输入参数,完成作答。
题目分析
摩尔投票法:
核心就是对拼消耗。
玩一个诸侯争霸的游戏,假设你方人口超过总人口一半以上,并且能保证每个人口出去干仗都能一对一同归于尽。最后还有人活下来的国家就是胜利。
从第一个数开始count=0,遇到相同的就加1,遇到不同的就减1,减到0就重新换个数开始计数,总能找到最多的那个
解答分析
本文只分析本人做题思路,仅供参考,了解一种解题思想,其他各种做题思路请上网查阅。
解答成功:
执行耗时:1 ms,击败了100.00% 的Java用户
内存消耗:41.9 MB,击败了48.03% 的Java用户
class Solution {
public int majorityElement(int[] nums) {
int num = nums[0];
int count = 0;
for (int i = 0; i < nums.length - 1; i++) {
if (num == nums[i]) {
count++;
} else {
count--;
if (count == 0) {
num = nums[i + 1];
}
}
}
return num;
}
}