LeetCode第27题Remove Element本地正常但平台运行异常求助
问题原因分析
你的代码核心问题是没有完成题目要求的「原地修改原数组」操作:
- 题目明确要求要将nums的前k位设为非val元素,但你的代码只是用List收集了所有非val元素、统计了数量k,完全没对输入的nums数组做任何修改。
- 在VS测试时你可能直接输出了List的内容,所以看起来结果正确;但LeetCode平台会检查你传入的nums数组本身的前k个元素,原数组没被修改,自然返回错误的结果。
修正方案(原地修改实现)
用双指针法可以高效完成原地修改,不需要额外创建List:
public class Solution { public int RemoveElement(int[] nums, int val) { int slow = 0; for (int fast = 0; fast < nums.Length; fast++) { if (nums[fast] != val) { nums[slow] = nums[fast]; slow++; } } return slow; } }
代码说明
- 慢指针
slow:标记当前需要放置非val元素的位置 - 快指针
fast:遍历整个数组,寻找非val元素 - 每次找到不等于val的元素,就把它赋值到
slow指向的位置,然后slow向前移动一位 - 最终
slow的值就是非val元素的数量k,同时nums的前k位已经被替换成了所有非val元素
内容的提问来源于stack exchange,提问作者mageff
相关产品推荐
相关产品推荐

