演算法 早餐組合

2021-10-09 11:58:09 字數 1482 閱讀 3012

題目

小釦在秋日市集選擇了一家早餐攤位,一維整型陣列 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...