You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的多数元素求解代码在LeetCode与InterviewBit上无法通过?

你的代码不正确的原因及修正方案

你的代码存在两个核心问题:

1. 类型丢失/错误转换

PHP的array_count_values()函数会将类型不同但值相等的元素视为同一个值进行统计:

  • 布尔值true会被转换为整数1,false转换为整数0
  • 字符串形式的数字(如"1")会被转换为整数1

之后使用array_flip()交换键值时,返回的是转换后的类型值,而非原数组中的多数元素本身。比如:

  • 输入数组[false, false, true],多数元素是false,但你的代码会返回0
  • 输入数组["1", "1", 2],多数元素是"1",但你的代码会返回整数1

2. 潜在的键冲突风险(虽题目保证多数元素存在,但仍需注意)

如果存在多个元素出现次数相同(题目中此情况不可能发生),array_flip()会覆盖之前的键值对,导致返回错误的元素。


修正后的代码

方案1:遍历统计结果(保留原元素类型)

function majorityElement($a){
    $counts = array_count_values($a);
    $maxCount = 0;
    $majority = null;
    foreach ($counts as $element => $count) {
        if ($count > $maxCount) {
            $maxCount = $count;
            $majority = $element;
        }
    }
    return $majority;
}

方案2:摩尔投票法(更高效,空间复杂度O(1))

利用多数元素出现次数超过floor(N/2)的特性,无需额外空间统计次数:

function majorityElement($a){
    $candidate = $a[0];
    $count = 1;
    for ($i = 1; $i < count($a); $i++) {
        if ($count == 0) {
            $candidate = $a[$i];
            $count = 1;
        } else if ($a[$i] === $candidate) {
            $count++;
        } else {
            $count--;
        }
    }
    return $candidate;
}

内容的提问来源于stack exchange,提问作者Luke Dobner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 10:13:21