Как найти два максимума в массиве во время цикла while
Дан массив чисел:
arr = [1,2,3,4,5]
Нужно присвоить двум другим переменным 2 максимума массивах.
Тогда a = 5, b = 4.
Затем удалить их обоих и внести в новый массив их разность.
То есть 1,2,3,4,5 превратится в 1,2,3,1.
Мой код (не верно работает):
class Solution:
def lastStoneWeight(self, stones: List[int]) -> int:
while len(stones)>1:
a=max(stones)
stones.remove(max(stones))
b=max(stones)
a-=b
if a==b:
a=0
b=0
b=0
return a
Ответы (2 шт):
Автор решения: And
→ Ссылка
Есть замечательная функция max - которая находит максимальный элемент массива.
Берем ее, находим максимальный элемент, выпиливаем, юзаем еще раз, находим второй максимум, выпиливаем, делаем вычитание одного из другого, запиливаем обратно в массив:
arr = [1,2,3,4,5]
oneMax = max(arr)
arr.remove(oneMax)
twoMax = max(arr)
arr.remove(twoMax)
diff = oneMax - twoMax
arr.append(diff)
print(arr)
Вывод:
[1,2,3,1]
Автор решения: nomnoms12
→ Ссылка
Решение за один проход с помощью цикла while:
li = [1, 2, 3, 4, 5]
second_max, first_max = sorted([li[0], li[1]])
i = 2
while i < len(li):
x = li[i]
if x > first_max:
second_max = first_max
first_max = x
elif x > second_max:
second_max = x
i += 1
d = first_max - second_max
li.remove(first_max)
li.remove(second_max)
li.append(d)
print(li)
stdout:
[1, 2, 3, 1]