Rotate Array代码在VS Code运行正常但LeetCode不生效,求原因
问题原因及解决方法
你的代码在VS Code和LeetCode表现不同的核心原因是没有原地修改传入的原数组,而是给函数内部的局部变量重新赋值了新数组。
具体分析
- JS参数传递规则:数组属于引用类型,函数参数接收的是原数组引用的副本。你在函数里写
nums = [...secondSet, ...firstSet]时,只是让函数内部的nums变量指向了一个新创建的数组,完全没改动传入的原数组内容。 - VS Code的表现:你应该是在函数内部直接打印了重新赋值后的
nums,所以看到的是新数组;但如果在函数外部打印nums1,结果还是原数组。 - LeetCode的要求:LeetCode的旋转数组题目要求原地修改输入数组,它会检查你传入的原数组是否被修改,而非函数内部的局部变量。
正确的实现方式
方式一:使用splice+unshift原地修改
var rotate = function(nums, k) { k = k % nums.length; // 处理k大于数组长度的边界情况 const secondPart = nums.splice(nums.length - k); nums.unshift(...secondPart); };
方式二:通过遍历替换原数组元素
var rotate = function(nums, k) { const len = nums.length; k = k % len; const tempArr = [...nums]; // 保存原数组副本 for (let i = 0; i < len; i++) { nums[(i + k) % len] = tempArr[i]; } };
内容的提问来源于stack exchange,提问作者michael cervantes
相关产品推荐
相关产品推荐

