LeetCode 26题:代码在VS Code正常却无法通过LeetCode的原因
问题原因分析
你的代码在VS Code能正常运行但无法通过LeetCode测试,核心是完全不符合题目规定的解题规则,具体问题如下:
1. 未原地修改输入数组
LeetCode 26题要求原地修改传入的有序数组,即直接修改原始的nums数组本身。你代码里的nums = [...new Set(nums)]是创建了一个去重后的新数组,让函数内部的nums变量指向这个新数组,但原输入数组根本没有被修改。LeetCode判题系统会检查传入的原始数组内容,所以你的操作对判题来说完全无效。
2. 返回值不符合要求
题目明确要求返回去重后元素的个数k(数字类型),但你返回的是k + '\n' + nums这种拼接后的字符串,和题目要求的返回类型、内容完全不匹配。
3. 全局变量带来的副作用
你定义了全局变量k,LeetCode测试时会多次调用removeDuplicates函数,全局变量会保留上一次测试的结果,导致后续测试用例的结果出错。
符合要求的解题示例
要用双指针法原地修改数组,满足题目要求:
const removeDuplicates = nums => { if (nums.length === 0) return 0; let slow = 0; for (let fast = 1; fast < nums.length; fast++) { if (nums[fast] !== nums[slow]) { slow++; nums[slow] = nums[fast]; } } return slow + 1; }
这段代码通过慢指针记录去重数组的末尾位置,快指针遍历数组,遇到不同元素就更新慢指针位置并赋值,最终返回的慢指针+1就是去重元素个数,同时原数组前k个元素就是去重后的结果。
内容的提问来源于stack exchange,提问作者SHAHAD HUSSEIN
相关产品推荐
相关产品推荐

