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

关于removeElement代码处理数组末尾val元素的行为问询

原地移除数组元素问题解答

问题背景

给定整数数组nums和整数val,需原地移除nums中所有val的实例,元素顺序可调整,返回nums中不等于val的元素个数k。要求:修改nums,使前k个元素为所有不等于val的元素,数组剩余元素及大小无需关注,返回k。

示例

  • 输入:nums = [3,2,2,3], val = 3
    输出:2,nums = [2,2,_,_]
  • 输入:nums = [0,1,2,2,3,0,4,2], val = 2
    输出:5,nums = [0,1,4,0,3,_,_,_]

用户代码

class Solution {
    public int removeElement(int[] nums, int val) {
        int newIndex = 0;
        for (int i = 0; i < nums.length; i++){
            if (nums[i]!= val){
                nums[newIndex] = nums[i];
                newIndex++;

            }
        }
        return newIndex;
    }
}

用户疑问

当val位于数组末尾时,例如数组为[1,2,3,4,5,2,2]、val=2,上述代码会如何处理?是否会直接忽略末尾的val,使其保留在原位置?


解答

直接拿你举的例子[1,2,3,4,5,2,2]、val=2走一遍代码逻辑:

  1. 初始化newIndex = 0,开始遍历数组:

    • 第1个元素1≠2:把1放到nums[0],newIndex变为1;
    • 第2个元素2=2:跳过,newIndex不变;
    • 第3个元素3≠2:把3放到nums[1],newIndex变为2;
    • 第4个元素4≠2:把4放到nums[2],newIndex变为3;
    • 第5个元素5≠2:把5放到nums[3],newIndex变为4;
    • 第6、7个元素都是2:全部跳过,newIndex保持4不变。
  2. 遍历结束后,返回newIndex=4,这就是不等于val的元素个数。

此时数组前4个元素会被更新为[1,3,4,5],原数组末尾的两个2确实会保留在原位置,最终数组状态为[1,3,4,5,5,2,2]。但这完全符合题目要求——题目只要求保证前k个元素是所有不等于val的元素,剩余位置的元素不需要做任何处理,所以这种情况是完全合规的。

简单说:

  • 末尾的val不会被修改,会留在原位置;
  • 但这并不影响结果的正确性,因为题目不关心这些剩余元素的状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 21:17:41