原题链接:
https://leetcode.cn/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/
解题思路:
- 假设输入:
[1, 2, 3, 2, 2, 2, 5, 4, 2]
,多数元素为2
。 - 使用
count
统计出现最多元素的次数,result
缓存多数元素。 - 遍历数组,如果出现
result
与nums[i]
不同,则将count
计数相抵消。 - 最终剩下的
result
只会是最多数量的元素2
。
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function(nums) {
let result = nums[0] // 缓存结果,从第一个值开始查找
let count = 1 // 第一次查找计数为1
for (let i = 1; i < nums.length; i++) {
// 如果当前有计数,则在当前基础上继续统计
if (count > 0) {
// 如果result与nums[i]相同,则累加一个。
// 不同则减少一个
count += result === nums[i] ? 1 : -1
} else if (count === 0) {
// 如果count被清零,则重新开始统计
result = nums[i]
count = 1
}
}
return result
};
网友评论