早餐组合----java

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/2vYnGI
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

首先我们可以使用双指针的形式,一个指向staple,一个指向drinks尾下标,并对数组进行排序,如果staple[i]和drinks[j]<x,那么说明j的drinks长度就是一组方案

程序运行过程:
staple[10,20,5]
drinks[5,5,2]
x=15

res=0
i=0;j=2,res=3
i=1;j=2,res=6
i=2;j=2;j=1;j=0;j=-1;res=6

class Solution {
    public int breakfastNumber(int[] staple, int[] drinks, int x) {
        Arrays.sort(staple);         //对数组进行有序排序
        Arrays.sort(drinks);
        int res=0;                  //从头开始当下标
        int j=drinks.length-1;      //从尾开始当下标,这样如果尾j符合,那么说明drinks.length的长度就是其中一组方案数
        for(int i=0;i<staple.length;i++) {
            if(j<0) break;          //排除特殊情况
            while(j>=0&&staple[i]+drinks[j]>x) {        //当大于0或者,两个数组的下标指向+起来大于x
                j--;
            } 
            res=(res+(j+1))%1000000007;                //小于的情况
        }
        return res%1000000007;
    }
}
posted @ 2021-04-01 16:59  网抑云黑胶SVIP用户  阅读(88)  评论(0编辑  收藏  举报