算法整理--早餐组合

题目

小扣在秋日市集选择了一家早餐摊位,一维整型数组 staple 中记录了每种主食的价格,一维整型数组 drinks 中记录了每种饮料的价格。小扣的计划选择一份主食和一款饮料,且花费不超过 x 元。请返回小扣共有多少种购买方案。

注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1

思路

假设,主食的价格最小的时候,加到饮料的价格中间的一个值,刚好符合条件,饮料在贵就买不起,此时,饮料再贵都不用考虑,便宜的赢料的都可以和刚开始的主食组合,主食在往上找,和刚找出来的饮料的价格的中间值,如果还不超过预算就算做方案,而这个中间值往前的也可以和现在的主食组合方案,如果超过预算则往下找,就可以找出所有的组合方案

代码

class Solution {
    public static int breakfastNumber(int[] staple, int[] drinks, int x) {
       Arrays.sort(staple);//对主食价格排序
       Arrays.sort(drinks);//对饮料价格排序
       int count = 0;//方案数
       int i = 0;//i是主食的循环次数
       int t = drinks.length-1;//t是饮料的循环次数
       while(i<=staple.length-1 && t>=0){
        if(staple[i]+drinks[t]>x){
            t--;//当主食的方案固定,和饮料搭配,如果超过预算,饮料往小的价格找
        }else{
        count=count+t+1;//找到刚好的饮料价格,此时这个中间值和固定的主食搭配都是一种方案,t是从0算起,所以要+1
        count%=1000000007;//符合答案要求
        i++;//主食价格往大找
        }


       }
       return count;//返回方案数
    }
}       
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值