ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python还能判断出早餐组合购买方案?吃早餐再也不愁不知道吃什么了

2020-12-23 14:34:08  阅读:226  来源: 互联网

标签:__ 二分 不愁 Python 早餐 饮料 bisect staple drinks


本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

本篇文章来自腾讯云 作者:算法与编程之美

( 想要学习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)

 

结语

本题关键在于解决食物和饮料的搭配,需要灵活运用二分查找来分别得到购买食物和饮料所能支出的最大金额,第一次运用时需保证剩余资金足够购买饮料。

标签:__,二分,不愁,Python,早餐,饮料,bisect,staple,drinks
来源: https://www.cnblogs.com/aa1273935919/p/14178444.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有