题目
小扣在秋日市集选择了一家早餐摊位,一维整型数组 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;//返回方案数
}
}