LeetCode 2706. Buy Two Chocolates
雙周賽105。
題目
輸入整數陣列prices,代表商店中每塊巧克力的價錢。另外還有整數money,代表你一開始持有的錢。
你必須購買正好兩塊不同的巧克力,總價格越小越好,但不能超過你持有的錢。
回傳買完巧克力後剩下的錢。如果買不起則回傳money。
解法
直接排序,前面兩個就是最小和次小的價格。
如果不超過money從money中扣除,否則直接回傳money。
時間複雜度O(N log N)。
空間複雜度O(1)。
class Solution:
def buyChoco(self, prices: List[int], money: int) -> int:
prices.sort()
mn=prices[0]+prices[1]
if mn>money:
return money
return money-mn
不需要排序也可以找到前兩小的價格。
時間複雜度O(N)。
空間複雜度O(1)。
class Solution:
def buyChoco(self, prices: List[int], money: int) -> int:
x1=x2=inf
for p in prices:
if p<x1:
x2=x1
x1=p
elif p<x2:
x2=p
if x1+x2>money:
return money
return money-x1-x2