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;
    }
};


相关文章
|
4月前
代码随想录Day29 贪心04 LeetCode T860 柠檬水找零 T406 根据身高重建队列 T452 用最少得箭引爆气球
代码随想录Day29 贪心04 LeetCode T860 柠檬水找零 T406 根据身高重建队列 T452 用最少得箭引爆气球
25 0
|
4月前
蓝桥备战--纪念品分组OJ532,贪心证明
蓝桥备战--纪念品分组OJ532,贪心证明
15 0
|
5月前
[leetcode 智力题] 2938. 区分黑球与白球 M
[leetcode 智力题] 2938. 区分黑球与白球 M
|
6月前
|
算法 Java
代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球
代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球
39 0
|
6月前
|
算法 网络架构
代码随想录算法训练营第三十三天 | LeetCode 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果
代码随想录算法训练营第三十三天 | LeetCode 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果
33 0
|
6月前
|
算法
代码随想录算法训练营第三十二天 | LeetCode 122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II
代码随想录算法训练营第三十二天 | LeetCode 122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II
26 0
|
6月前
|
算法 测试技术 容器
代码随想录算法训练营第四十二天 | LeetCode 1049. 最后一块石头的重量 II、494. 目标和、474. 一和零
代码随想录算法训练营第四十二天 | LeetCode 1049. 最后一块石头的重量 II、494. 目标和、474. 一和零
29 1
|
8月前
leetcode 1921. 消灭怪物的最大数量(每日一题)
leetcode 1921. 消灭怪物的最大数量(每日一题)
57 0
|
8月前
挤奶牛奶预备事项(应用的数学分析,贪心思想)
挤奶牛奶预备事项(应用的数学分析,贪心思想)
18 0
|
8月前
|
人工智能
P1208 [USACO1.3]混合牛奶 Mixing Milk(贪心思想加一点特别的循环)
P1208 [USACO1.3]混合牛奶 Mixing Milk(贪心思想加一点特别的循环)
42 0