Open
Description
/**
* @param {number[]} nums
* @return {number}
*/
// 普通方法
var majorityElement = function (nums) {
const map = {};
let res;
for (let i = 0; i < nums.length; i++) {
map[nums[i]] = (map[nums[i]] || 0) + 1;
if (map[nums[i]] > nums.length / 2) {
res = nums[i]
}
}
return res;
};
// 抵消法
const majorityElement = nums => {
let count = 1; // 遍历从下标1的元素开始, 于是给count设置1
let majority = nums[0]; // 初始值给第一个元素
for (let i = 1; i < nums.length; i++) {
// 如果次数被抵消完, 说明等于majority和不等于majority的一样多
if (count === 0) {
majority = nums[i];
}
if (nums[i] === majority) {
// 重复的就+1
count++;
} else {
// 不重读就抵消count
count--;
}
}
return majority;
};