в приведенном ниже коде я пытаюсь обновить значение сумма до (rsum - lsum - nums[i]) внутри цикла for, это дает мне неправильный результат. Но если я объявлю новое имя переменной и назначу ему значение (rsum - lsum - nums[i]), это даст мне правильный результат. В чем причина этого?
Код, который дает неправильный вывод
def pivotIndex(nums: List[int]) -> int:
n = len(nums)
if n == 1: return 0
lsum = 0
rsum = sum(nums)
for i in range(n):
rsum = rsum - lsum - nums[i]
if lsum == rsum:
return i
lsum += nums[i]
return -1
Код, который дает мне правильный вывод
def pivotIndex(nums: List[int]) -> int:
n = len(nums)
if n == 1: return 0
lsum = 0
rsum = sum(nums)
for i in range(n):
total = rsum - lsum - nums[i]
if lsum == total:
return i
lsum += nums[i]
return -1
Во второй раз в вашем цикле rsum
имеет исходное значение, если ваше второе решение и новое значение в вашем первом решении. Они делают совершенно разные вещи
Если код 2 правильный, то, возможно, код 1 должен быть: 'rsum = rsum - nums[i]'. Таким образом, вы каждый раз вычитаете только текущее число из rsum.
В строке 11, где вы получаете неправильный вывод, вы меняете значение rsum каждое, поэтому, когда вы это делаете (rsum-lsum-num[i]), вы получите новое значение rsum, из которого мы удалим lsum и num[i] ]. Когда вы будете проверять lsum == rsum
, это может быть правдой один раз, но затем, когда значение rsum изменится, оно может не быть равным.
В коде, где вы получаете правильный ввод, rsum останется прежним, то есть sum(nums)
, и вы каждый раз будете удалять lsum и nums[i].
Я не знаю, достаточно ли я ясно выразился, а если нет, пожалуйста, скажите мне.
Большое спасибо за этот ответ и указание на мою глупую ошибку. Я понял, где ошибся.
Вы могли бы просто добавить загрузку операторов печати, чтобы увидеть значение total и rsum на каждой итерации? Это обычно помогает мне понять мой код, если я застрял.