排序 时间复杂度 O(nlogn) 空间复杂度 O(logn)
/*** @param {number[]} nums* @return {number}*/
var majorityElement = function (nums) {nums = nums.sort()// 排序之后数组中间的数一定是众数(因为题目说数组中的众数大于 ⌊nums.length/2⌋)return nums.find(item=>item==nums[Math.floor(nums.length/2)])
};
Boyer Moore投票算法 时间复杂度 O(n) 空间复杂度 O(1)
/*** @param {number[]} nums* @return {number}*/
var majorityElement = function (nums) {// 初始化计数器和数量最多的数let count = 0;let candidate = null;for (let item of nums) {// 如果计数器归零说明之前数量最多的数被后来最多的数给顶掉了if (count === 0) {candidate = item;}// 如果当前的数等于当前数量最多的数计数器+1// 否则-1if (item === candidate) {count++;} else {count--;}}return candidate;
};