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

LeetCode移除元素代码未通过问题排查及错误原因分析

LeetCode移除元素问题代码错误分析

问题背景

我用Java编写了解决LeetCode移除元素问题的代码,本地编译器运行输出结果正确,但提交到LeetCode后未通过,想搞清楚原代码的问题所在。

题目要求:给定整数数组nums和整数val,原地移除nums中所有等于val的元素,元素顺序可改变,返回nums中不等于val的元素数量。

原代码

// Online Java Compiler
// Use this editor to write, compile and run your Java code online
import java.util.*;
class HelloWorld {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the size of the array");
        int n=sc.nextInt();
        int[] nums = new int[n];
        int k=0, val;
        System.out.println("Enter the elements");
        for(int i=0;i<nums.length;i++){
            nums[i] = sc.nextInt();
        }
        System.out.println("Enter the value to remove");
        val=sc.nextInt();
        for(int i=0;i<(nums.length);i++){
            if(nums[i]==val){
                nums[i]=nums[i]-val;
                k++;
            }
        }
        System.out.println("Here are number of elements left "+(nums.length-k)+" Numbers are deleted "+k);
    }
}

本地运行示例结果

Enter the size of the array
4
Enter the elements
2
3
3
2
Enter the value to remove
2
Here are number of elements left 2 Numbers are deleted 2

原代码错误原因

你误解了LeetCode题目的核心要求:

  • 题目要求原地修改数组,并且需要保证数组的前k个元素(k是你返回的有效元素数量)全部是不等于val的有效元素。你的代码只是把等于val的元素改成了nums[i]-val(比如val=2时就是0),但这些被修改的元素仍然留在数组的原位置,LeetCode的判题器会检查数组的前k个元素是否符合要求,显然你的数组里还存在这些无效的标记值,不符合判题标准。
  • 你的逻辑仅统计了需要删除的元素数量,计算出有效元素的数值,但没有真正将有效元素移动到数组的前半部分,判题器不仅校验返回的数值,还会验证数组的实际内容是否符合“移除所有val”的要求。

正确解法对比

修改后的代码通过将所有不等于val的元素依次覆盖到数组的前k个位置,既统计了有效元素数量k,又保证了数组前k个位置都是有效元素,完全符合题目“原地移除”的要求,因此提交成功:

for (int i = 0; i < (nums.length); i++) {
        if (nums[i] != val) {
            nums[k] = nums[i];
            k++;
        }
    }

内容的提问来源于stack exchange,提问作者Aman Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 08:25:04