将元素添加到第一个位置数组javascript

时间:2018-02-04 11:43:59

标签: javascript arrays data-structures

我想知道第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;

3 个答案:

答案 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)复杂度。