原題鏈接:
https://leetcode.cn/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/
解題思路:
- 假設(shè)輸入:
[1, 2, 3, 2, 2, 2, 5, 4, 2],多數(shù)元素為2。 - 使用
count統(tǒng)計(jì)出現(xiàn)最多元素的次數(shù),result緩存多數(shù)元素。 - 遍歷數(shù)組,如果出現(xiàn)
result與nums[i]不同,則將count計(jì)數(shù)相抵消。 - 最終剩下的
result只會是最多數(shù)量的元素2。
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function(nums) {
let result = nums[0] // 緩存結(jié)果,從第一個(gè)值開始查找
let count = 1 // 第一次查找計(jì)數(shù)為1
for (let i = 1; i < nums.length; i++) {
// 如果當(dāng)前有計(jì)數(shù),則在當(dāng)前基礎(chǔ)上繼續(xù)統(tǒng)計(jì)
if (count > 0) {
// 如果result與nums[i]相同,則累加一個(gè)。
// 不同則減少一個(gè)
count += result === nums[i] ? 1 : -1
} else if (count === 0) {
// 如果count被清零,則重新開始統(tǒng)計(jì)
result = nums[i]
count = 1
}
}
return result
};