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

LeetCode多数元素问题代码错误排查:输入[3,3,4]返回4而非3

多数元素问题代码错误排查与修复

你的代码在处理输入[3,3,4]时返回4而非预期的3,核心问题出在countInRange函数的逻辑错误:

  • countInRange的设计目标是统计指定范围内目标数字num的出现次数,但当前代码的判断逻辑完全错误:循环内你判断的是si == ei(即当前范围是否仅包含单个元素),而非判断遍历到的元素nums[i]是否等于目标num。
  • 这会导致统计结果完全失真:当范围长度大于1时,si != ei,循环内的计数条件永远不触发,返回0;只有当范围长度为1时,才会返回1。

以输入[3,3,4]为例,执行流程的错误点:

  1. 递归拆分后,左半部分返回3,右半部分返回4;
  2. 调用countInRange统计3的次数时,范围是0-2(si≠ei),返回0;
  3. 统计4的次数时,同样范围0-2,返回0;
  4. 此时leftCount与rightCount相等,三元运算符返回后者4,最终结果错误。

修复后的代码

class Solution {
    // 修复后的countInRange函数
    public static int countInRange(int nums[], int num, int si, int ei) {
        int count = 0;
        for(int i = si; i <= ei; i++) {
            // 正确判断当前元素是否等于目标num
            if(nums[i] == num) {
                count++;
            }
        }
        return count;
    }  

    private static int majorityElementRec(int nums[], int si, int ei) {
        if(si == ei) {
            return nums[si];
        }
        int mid = si + (ei - si)/2;
        int left = majorityElementRec(nums, si, mid);
        int right = majorityElementRec(nums, mid+1, ei);
        
        if(left == right) {
            return left;
        }
        int leftCount = countInRange(nums, left, si, ei);
        int rightCount = countInRange(nums, right, si, ei);
        return leftCount > rightCount ? left : right;
    }

    public int majorityElement(int[] nums) {
        return majorityElementRec(nums, 0, nums.length-1);
    }
}

内容的提问来源于stack exchange,提问作者Gulshan Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:45:51