多数元素
最直白的自然是哈希表计数。
排序
排序后中间的值一定是众数。
function majorityElement(nums: number[]): number {
return nums.sort()[Math.floor(nums.length / 2)]
}
投票法
直觉是想到栈了。
function majorityElement(nums: number[]): number {
const stack: number[] = []
for (let n of nums) {
if (!stack.length) {
stack.push(n)
continue
}
if (stack[stack.length - 1] === n) {
stack.push(n)
} else {
stack.pop()
}
}
return stack[0]
}
优化下空间复杂度,则可以得到投票法。
function majorityElement(nums: number[]): number {
let candidate = 0
let count = 0
for (let n of nums) {
if (count === 0) {
candidate = n
}
count += candidate === n ? 1 : -1
}
return candidate
}