169. Majority Element

26 年 3 月 8 日 星期日
327 字
2 分钟

169. Majority Element

Screenshot 2026-03-08 at 2.59.36 pm

核心思想--抵消原则: 在一个数组中,如果某个元素的出现次数超过了数组长度的一半,那么这个元素与其他所有元素一一配对,最后仍然会剩下至少一个该元素。 通过“投票”和“抵消”的过程,可以逐步消除不同的元素,最终留下的候选人就是可能的主要元素。

我用「擂台赛」打比方:

擂主登场:nums[0] 成为初始擂主,生命值为 1。 挑战者出现:遍历后续元素,作为挑战者。 比武:如果挑战者与擂主属于同一门派(值相同),那么擂主生命值加 1,否则擂主生命值减 1。 擂主更迭:如果比武后,擂主生命值降为 0(同归于尽),那么下一个挑战者成为新的擂主,生命值为 1。 最后在擂台上的那人,便是武林盟主(严格众数)。

js
/**
 * @param {number[]} nums
 * @return {number}
 */
var majorityElement = function (nums) {
  let ans = 0,
    hp = 0
  for (const x of nums) {
    if (hp === 0) {
      // x 是初始擂主,生命值为 1
      ans = x
      hp = 1
    } else {
      // 比武,同门加血,否则扣血
      hp += x === ans ? 1 : -1
    }
  }
  return ans
}

文章标题:169. Majority Element

文章作者:Sirui Chen

文章链接:https://blog.siruichen.me/posts/169_majority_element[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。