Я пытался решить проблему поиска подпоследовательности массива, в которой сумма старших элементов больше, чем у остальных элементов, например:
[4, 3, 10, 9, 8 ] равен [10, 9], потому что их сумма больше, чем [4, 3, 8]
(всю проблему можно найти здесь )
Для моего кода после сортировки чисел в не убывающем порядке я начал с if l oop:
sorty = []
i = 0
for n in nums:
if sum(sorty) <= sum(nums):
sorty.append(nums[-1])
nums.pop()
else:
break
return sorty
Но это не сработало для массива, подобного [8, 8], потому что вывод был sorty = [8]
, nums = [8]
вместо sorty = [8, 8]
. Вместо этого я использовал какое-то время l oop. Я не понимаю, поскольку if l oop должен продолжать работать, даже если первый список равен второму списку, так почему же он остановился после того, как сумма двух списков была равна? Я использовал операнд <=. </p>
Есть ли какая-то основная разница, присущая циклам if vs while, которые я пропускаю?