LeetCode 18. 早餐组合

简介: LeetCode 18. 早餐组合

LCP 18. 早餐组合


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


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


示例 1:


输入:staple = [10,20,5], drinks = [5,5,2], x = 15
输出:6


解释:小扣有 6 种方案,所选主食与所选饮料在数组中对应的下标分别是:


第 1 种方案:staple[0] + drinks[0] = 10 + 5 = 15;


第 2 种方案:staple[0] + drinks[1] = 10 + 5 = 15;


第 3 种方案:staple[0] + drinks[2] = 10 + 2 = 12;


第 4 种方案:staple[2] + drinks[0] = 5 + 5 = 10;


第 5 种方案:staple[2] + drinks[1] = 5 + 5 = 10;


第 6 种方案:staple[2] + drinks[2] = 5 + 2 = 7。


示例 2:


输入:staple = [2,1,1], drinks = [8,9,5,1], x = 9
输出:8


解释:小扣有 8 种方案,所选主食与所选饮料在数组中对应的下标分别是:


第 1 种方案:staple[0] + drinks[2] = 2 + 5 = 7;


第 2 种方案:staple[0] + drinks[3] = 2 + 1 = 3;


第 3 种方案:staple[1] + drinks[0] = 1 + 8 = 9;


第 4 种方案:staple[1] + drinks[2] = 1 + 5 = 6;


第 5 种方案:staple[1] + drinks[3] = 1 + 1 = 2;


第 6 种方案:staple[2] + drinks[0] = 1 + 8 = 9;


第 7 种方案:staple[2] + drinks[2] = 1 + 5 = 6;


第 8 种方案:staple[2] + drinks[3] = 1 + 1 = 2;


代码


class Solution {
public:
    int breakfastNumber(vector<int>& staple, vector<int>& drinks, int x) {
        const int mod = 1e9 + 7;
        int ans = 0;
        // 从小到大排序
        sort(staple.begin(), staple.end());
        sort(drinks.begin(), drinks.end());
        int j = drinks.size() - 1;
        /*
        思想:让主食的最小去依次去加饮料从大到小的价钱,
        如果加到一个当前最大的饮料价钱就不用再计算比这个价钱小的那些价钱了(必然满足),
        此时数量就是当前主食对应的购买方案个数
        。。。。。
        以此类推计算下一个主食的搭配
        */ 
        for (int i = 0; i < staple.size(); i++) {
            while (j >= 0 && staple[i] + drinks[j] > x) 
                j--;
            if (j == -1)
                break;
            ans += j + 1;
            ans %= mod;
        }
        return ans;
    }
};


相关文章
|
3月前
代码随想录Day29 贪心04 LeetCode T860 柠檬水找零 T406 根据身高重建队列 T452 用最少得箭引爆气球
代码随想录Day29 贪心04 LeetCode T860 柠檬水找零 T406 根据身高重建队列 T452 用最少得箭引爆气球
25 0
|
4月前
|
算法
【力扣热题100】287. 寻找重复数(弗洛伊德的乌龟和兔子方法)
【力扣热题100】287. 寻找重复数(弗洛伊德的乌龟和兔子方法)
33 0
|
4月前
[leetcode 智力题] 2938. 区分黑球与白球 M
[leetcode 智力题] 2938. 区分黑球与白球 M
|
5月前
|
算法 Java
代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球
代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球
39 0
|
7月前
挤奶牛奶预备事项(应用的数学分析,贪心思想)
挤奶牛奶预备事项(应用的数学分析,贪心思想)
17 0
|
7月前
|
人工智能
P1208 [USACO1.3]混合牛奶 Mixing Milk(贪心思想加一点特别的循环)
P1208 [USACO1.3]混合牛奶 Mixing Milk(贪心思想加一点特别的循环)
40 0
|
9月前
|
机器学习/深度学习 Cloud Native Go
1700. 无法吃午餐的学生数量:简单模拟+简单分类思想
这是 力扣上的 1700. 无法吃午餐的学生数量,难度为 简单。
124 0
|
9月前
|
测试技术
L2-003 月饼 (25 分)(贪心)
L2-003 月饼 (25 分)(贪心)
59 0
|
10月前
|
算法 C语言
力扣 - LCP 18. 早餐组合
力扣 - LCP 18. 早餐组合
73 0
|
11月前
|
人工智能 算法 C++
【每日算法Day 88】超越妹妹教你如何做这道排序题
【每日算法Day 88】超越妹妹教你如何做这道排序题