LeetCode 3457. Eat Pizzas!
weekly contest 437。
花了半小時才搞出證明,但至少是一次過,還算滿意。
題目
https://leetcode.com/problems/eat-pizzas/description/
解法
總共要吃 cnt = N / 4 次漢堡。
每次吃 4 個漢堡,兩種操作輪流:
- 操作一,得到最大的分數。
- 操作二,得到次大的分數。
操作一很直觀,就是選當前最大的,加上三個最小的。
但操作二就很迷惑,如果選兩個最大的,會讓最大的被浪費。
有時候似乎可以選擇四個最小的,然後讓下次操作一吃到最大的。
先不管到底怎麼吃,總之操作次數是確定的。
操作一有 odd = ceil(cnt / 2) 次,操作二有 even = floor(cnt / 2) 次。
先把前 odd 最大的漢堡給操作一吃。
然後剩下都給操作二,挑次大的吃,重複 even 次。
時間複雜度 O(N log N)。
空間複雜度 O()。
class Solution:
def maxWeight(self, pizzas: List[int]) -> int:
cnt = len(pizzas) // 4
pizzas.sort()
odd = (cnt+1) // 2
even = cnt - odd
ans = 0
for _ in range(odd):
ans += pizzas.pop()
for _ in range(even):
pizzas.pop()
ans += pizzas.pop()
return ans