1. 程式人生 > 實用技巧 >Python還能判斷出早餐組合購買方案?吃早餐再也不愁不知道吃什麼了

Python還能判斷出早餐組合購買方案?吃早餐再也不愁不知道吃什麼了

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理

本篇文章來自騰訊雲 作者:演算法與程式設計之美

( 想要學習Python?Python學習交流群:1039649593,滿足你的需求,資料都已經上傳群檔案流,可以自行下載!還有海量最新2020python學習資料。 )

問題描述

小扣在秋日市集選擇了一家早餐攤位,一維整型陣列 staple 中記錄了每種主食的價格,一維整型陣列 drinks 中記錄了每種飲料的價格。小扣的計劃選擇一份主食和一款飲料,且花費不超過 x 元。請返回小扣共有多少種購買方案。

注意:

答案需要以 1e9 + 7 (1000000007) 為底取模,如:計算初始結果為:1000000008,請返回 1

提示:

1 <= staple.length <= 10^5

1 <= drinks.length <= 10^5

1 <= staple[i],drinks[i] <= 10^5

1 <= x <= 2*10^5

解決方案

首先可知買飲料的價格會小於等於總費用減去購買食物的支出額,所以可用兩次二分查詢進行解決;第一個二分查詢得到買食物所能支出的最大金額(需保證所剩金額足夠購買飲料)、第二個二分查詢得到買飲料所能支出的最大金額。

程式碼如下:

from bisect import bisect_right
class Solution:
    def breakfastNumber(self, staple, drinks, x):
        s = 0
        staple.sort()
        drinks.sort()
        staple_len = bisect_right(staple, x - drinks[0])
        for food in staple[:staple_len]:
            i = bisect_right(drinks, x - food)
            s 
+= i return s % 1000000007 if __name__ == '__main__': solution=Solution() a=solution.breakfastNumber() print(a)

結語

本題關鍵在於解決食物和飲料的搭配,需要靈活運用二分查詢來分別得到購買食物和飲料所能支出的最大金額,第一次運用時需保證剩餘資金足夠購買飲料。