关于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走一遍代码逻辑:
初始化
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不变。
- 第1个元素
遍历结束后,返回
newIndex=4,这就是不等于val的元素个数。
此时数组前4个元素会被更新为[1,3,4,5],原数组末尾的两个2确实会保留在原位置,最终数组状态为[1,3,4,5,5,2,2]。但这完全符合题目要求——题目只要求保证前k个元素是所有不等于val的元素,剩余位置的元素不需要做任何处理,所以这种情况是完全合规的。
简单说:
- 末尾的
val不会被修改,会留在原位置; - 但这并不影响结果的正确性,因为题目不关心这些剩余元素的状态。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

