【发布时间】:2021-10-04 02:05:41
【问题描述】:
嗨,这是我在这里的第一篇文章,我正在尝试从 leetcode 解决这个问题https://leetcode.com/problems/rotate-array/,我知道这不是最好的解决方案,但我仍然对我得到的结果感到困惑。这是问题: 给定一个数组,将数组向右旋转 k 步,其中 k 是非负数。
例子:
输入:nums = [1,2,3,4,5,6,7], k = 3 输出:[5,6,7,1,2,3,4]
这是我的答案
var rotate = function(nums, k) {
let n=0
let temp = []
let l =nums.length
k=k%l
let x = JSON.parse(JSON.stringify(nums))
while(n<k){
let last = x[l-1]
for(let i=1;i<l;i++){
temp[i] = x[i-1]
}
temp[0]=last
x=JSON.parse(JSON.stringify(temp))
n++
}
return x
};
当我执行 console.log(x) 时,我看到了正确答案,但是当我返回 x 时,它显示错误答案输出:[1,2,3,4,5,6,7] enter image description here 我在这里错过了什么?
【问题讨论】:
-
您在哪里(在您的代码中)执行“console.log(x)”?另外,你为什么使用 JSON.parse() 函数?
-
在任务中,在 JSDoc 中它说 “
* @return {void}不返回任何内容,而是在原地修改 nums。”,这是不言自明的。见In-place algorithm。 -
我同意@SebastianSimon 所说的。我想补充的一件事是:如果 nums.length = 1,000,000(是的,100 万)怎么办?然后您的代码以 nums.length * nums.length 运行。这是 UBER 低效的。考虑一些更有效的方法。
-
“我知道这不是最好的解决方案” — 为什么还要嵌套循环?此任务需要线性传递。见Rotate the elements in an array in JavaScript。
-
@Owen 我在返回 x 之前正在编写 console.log(x),但现在我重新阅读了这个问题,@sebastian 是对的,我不应该返回任何东西,只需要返回更改“数字”。但是,即使我在最后一行做
x=nums,而不是返回,我也没有得到正确的答案。我也做了 JSON.parse() ,以制作我的数组的深层副本
标签: javascript arrays data-structures