我想知道第2行为什么(n-1)?不应该是(n + 1)。enter image description here
for(var i=numbers.length; i >=0; i--){
numbers[i] = numbers[i-1];
}
numbers[0] = -1;
答案 0 :(得分:1)
数组索引从0
开始,最多为n-1
。因此,为了按1
位置移位元素,
如果我的数组是arr[]
,则
[n-1]
处的元素转移到[n]
,[n-2]
转移到[n-1]
,[n-3]
转移到[n-2]
,依此类推poisition [0]
转移到[1]
最后在位置0
添加元素。
这就是为什么内部循环包含arr[i-1]
将其值赋给arr[i]
答案 1 :(得分:0)
这里的数字是你的数组。
你可以看到他们通过初始化i来开始循环,成为数组的长度。 然后它应该是n-1
假设您的数组是
a = [1,2]
a.length = 2
如果设置[i],第一次在循环中你会得到:a [2] a [2]未定义。
最后一个元素是[1] a [1]是2
要访问数组中的最后一个元素,你应该做[a.lenght - 1]
答案 2 :(得分:0)
for(var i=numbers.length; i >=0; i--){
numbers[i] = numbers[i-1];
}
numbers[0] = -1;
numbers
0 1 2 3 <- Positions
0: [1, 2, 3, 4]
-> length = 4, so the algorithm will move the 4 to position numbers[4]
|
-> Iterations |
| |
| 0 1 2 3 4 <- Positions
1: [1, 2, 3, 4, 4] <- Move to right -> numbers[4] = numbers[3]
2: [1, 2, 3, 3, 4] <- Move to right -> numbers[3] = numbers[2]
3: [1, 2, 2, 3, 4] <- Move to right -> numbers[2] = numbers[1]
4: [1, 1, 2, 3, 4] <- Move to right -> numbers[1] = numbers[0]
5: [-1, 1, 2, 3, 4] <- numbers[0] = -1;
^
|_ numbers[0] = -1
基本上,算法将值移到右边
该算法具有O(n)
复杂度。