題目:
小釦在秋日市集選擇了一家早餐攤位,一維整型陣列 staple 中記錄了每種主食的**,一維整型陣列 drinks 中記錄了每種飲料的**。小釦的計畫選擇乙份主食和一款飲料,且花費不超過 x 元。請返回小釦共有多少種購買方案。
注意:答案需要以 1e9 + 7 (1000000007) 為底取模,如:計算初始結果為:1000000008,請返回 1
這個題目,直觀暴力解法確實感覺很簡單:
res =
0for i in staple:
for j in drinks:
if i+j<=x:
res+=
1
但是結果——超時
那怎麼辦呢,剪枝……結果……依然超時。
然後呢,試試排序,然後只要遇到求和大於x的,就可以不用計算了。
但巢狀迴圈的時間複雜度,肯定是 m*n
所以有沒有辦法變成m+n呢?
from typing import list
class
solution
:def
breakfastnumber
(self, staple: list[
int]
, drinks: list[
int]
, x:
int)
->
int:
res =
0 staple.sort(
) drinks.sort(
) m =
len(staple)
n =len(drinks)
# for i in range(m):
# if x# break
# for j in range(n-1,-1,-1):
# if drinks[j]+staple[i]<=x:
# res += j+1
# n=j+1
# break
i=0 j=n-
1while i=0:
if drinks[j]
+ staple[i]
<= x:
i+=1 res += j +
1else
: j-=
1return res%
1000000007
if __name__ ==
'__main__'
: res = solution(
).breakfastnumber([10
,20,5
],[5
,5,2
,10],
15)print
(res)
LCP 18 早餐組合
小釦在秋日市集選擇了一家早餐攤位,一維整型陣列 staple 中記錄了每種主食的 一維整型陣列 drinks 中記錄了每種飲料的 小釦的計畫選擇乙份主食和一款飲料,且花費不超過 x 元。請返回小釦共有多少種購買方案。注意 答案需要以 1e9 7 1000000007 為底取模,如 計算初始結果為 1...
leetcode V LCP18 早餐組合
題目 小釦在秋日市集選擇了一家早餐攤位,一維整型陣列 staple 中記錄了每種主食的 一維整型陣列 drinks 中記錄了每種飲料的 小釦的計畫選擇乙份主食和一款飲料,且花費不超過 x 元。請返回小釦共有多少種購買方案。注意 答案需要以 1e9 7 1000000007 為底取模,如 計算初始結果...
LCP 18 早餐組合
小釦在秋日市集選擇了一家早餐攤位,一維整型陣列 staple 中記錄了每種主食的 一維整型陣列 drinks 中記錄了每種飲料的 小釦的計畫選擇乙份主食和一款飲料,且花費不超過 x 元。請返回小釦共有多少種購買方案。注意 答案需要以 1e9 7 1000000007 為底取模,如 計算初始結果為 1...