229. Majority Element II

2021-10-17  本文已影响0人  jluemmmm

给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。

摩尔投票法

大于 n/3 的数最多有三个

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var majorityElement = function(nums) {
  let count1 = 0;
  let count2 = 0;
  let candidate1;
  let candidate2;
  
  for (let val of nums) {
    if (candidate1 === val) {
      count1++;
    } else if (candidate2 === val) {
      count2++;
    } else if (count1 === 0) {
      candidate1 = val;
      count1++;
    } else if (count2 === 0) {
      candidate2 = val;
      count2++;
    } else {
      count1--;
      count2--;
    }
  }
  
  count1 = 0;
  count2 = 0;
  for (let val of nums) {
    if (candidate1 === val) {
      count1++;
    }
    if (candidate2 === val) {
      count2++;
    }
  }
  
  const res = [];
  const len = parseInt(nums.length / 3);
  if (count1 > len) res.push(candidate1)
  if (count2 > len) res.push(candidate2);
  return res;
};
上一篇 下一篇

猜你喜欢

热点阅读