Этот метод повторяет все числа в Array
.Он начинается с добавления первого числа в Array
, поскольку оно не может быть дубликатом, поскольку это первое число.(Для этого и используется i == 0
часть if
. Затем он смотрит на один индекс обратно, чтобы увидеть, если n > nums[i - 1]
. Единственный способ, которым это будет верно, - это если n
не является дубликатом, так каксписок отсортирован. Если это так, то мы добавляем его в Array
. Возьмем этот пример:
[0, 1, 1, 3]
На первой итерации:
n == 0
i == 0
i == 0
оценивается как true. 0
добавляется к индексу 0
.
Вторая итерация:
n == 1
i == 1
n > nums[i - 1]
(1> 0
) оценивается как true, 1
добавляется к Array
Третья итерация:
n == 1
i == 2
n > nums[i - 1]
(1> 1) оценивается как false
, так что 1
is not добавлено к Array
Четвертая итерация:
n == 3
i == 2
n > nums[i - 1]
(3> 1) оценивается как true
, а 3
добавляется к Array
.
Также, если я раскомментирую систему.из линии тогда этогенерирует исключение, поэтому почему nums [i - 1] работает в блоке if для случая, где i = 0?
Это потому, что ||
- операция короткого замыкания.Это означает, что если одна сторона оценивает значение true, другая сторона не будет оцениваться.Так что в случае, когда i == 0
:
if (i == 0 || n > nums[i - 1])
^^^^^^--- Evaluates to true. num[i-1] is not considered
nums[i++] = n;
Затем вы вызываете nums[i++]
(который увеличивает i
после того, как он помещает n
в nums[i]
), что составит i
1Затем вы позвоните num[i -1]
, который будет 0
, действительным индексом.