小扣在秋日市集选择了一家早餐摊位,一维整型数组 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;

提示:

1 <= staple.length <= 10^5
1 <= drinks.length <= 10^5
1 <= staple[i],drinks[i] <= 10^5
1 <= x <= 2*10^5

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

1.最基本的思路:暴力求解

通过依次排列组合,这样的解法会超时,测试例库中有非常变态的测试用例

[1,1,1,1,1,1,1,1,1,1,1,1,1…]
[1,1,1,1,1,1,1,1,1,1,1,1,1…]
2

//排列组合
int breakfastNumber(int* staple, int stapleSize, int* drinks, int drinksSize, int x){int i;int j;int count=0;for(i = 0; i < stapleSize; i++){for(j = 0; j < drinksSize; j++){if(staple[i]+drinks[j]  <= x){count = count % 1000000007;count++;}}}return count;
}

2.优化

  1. 调用C库函数qsort(),先排序
  2. 进一步排列组合,减少组合次数,发现也超时
 # define yichu 1000000007;
int compar(const void *p1,const void*p2){const int * a1 = (const int *) p1;const int * a2 = (const int *) p2;if (*a1 < *a2)return -1;else if (*a1 == *a2)return 0;elsereturn 1;
}int breakfastNumber(int* staple, int stapleSize, int* drinks, int drinksSize, int x){int i;int j;int k = drinksSize-1;int count=0;qsort(staple,stapleSize,sizeof(int),compar);//默认升序qsort(drinks,drinksSize,sizeof(int),compar);//默认升序for(i =0; i < stapleSize ; i++){for(j = k; j >= 0;j--){if(staple[i]+drinks[j]  <= x){count = (count+(j+1)) % yichu;k = j;//记录遍历的位置break;}}}return count;
}

3.终极解法

#define mod 1000000007
int breakfastNumber(int* staple, int stapleSize, int* drinks, int drinksSize, int x){int cnt[100001] = {0};//类似哈希表,将数组元素的值写入新的数组,下标值即对应元素值for (int i=0; i<drinksSize; ++i) cnt[drinks[i]] += 1;//计算数组中的每个下标前的元素个数。也就是某个计算饮料数组中小于等于此处下标值得元素个数for (int i=1; i<100001; ++i)cnt[i] += cnt[i-1];long num = 0;for (int i=0; i<stapleSize; ++i) {int idx = x - staple[i];//查看下标处的值(个数)if (idx >= 0) {idx = fmin(idx, 100000);//调用函数fmin(),当idx超过100000时,说明都符合要求,所以取数组下标为100000的值num += cnt[idx];if (num >= mod) num %= mod;}}return num;
}

LCP 18.早餐组合相关推荐

  1. ⭐算法入门⭐《二分枚举》简单15 —— LeetCode LCP 18. 早餐组合

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   小扣在秋日市集选择了一 ...

  2. LCP 18. 早餐组合

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

  3. 【Leetcode】 LCP 18. 早餐组合(简单)

    1. 题目 小扣在秋日市集选择了一家早餐摊位,一维整型数组 staple 中记录了每种主食的价格,一维整型数组 drinks 中记录了每种饮料的价格.小扣的计划选择一份主食和一款饮料,且花费不超过 x ...

  4. LeetCode LCP 18. 早餐组合 JAVA

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

  5. 【二分查找-简单】LCP 18. 早餐组合

    题目 注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1 提示: 1 <= staple.length <= 10^ ...

  6. LeetCode 18. 早餐组合

    LCP 18. 早餐组合 小扣在秋日市集选择了一家早餐摊位,一维整型数组 staple 中记录了每种主食的价格,一维整型数组 drinks 中记录了每种饮料的价格.小扣的计划选择一份主食和一款饮料,且 ...

  7. 【编程题】【Scratch四级】2022.03 早餐组合

    早餐组合 小猫家附近的早餐店会供应两种饮料和四种点心,饮料和点心只能各选一种,问共有多少种不同的早餐搭配? 饮料:豆浆,牛奶 点心:蛋糕.油条.饼干.面包 1. 准备工作 (1)保留舞台白色背景和默认 ...

  8. 【早餐组合(LCP-18-java)】

    早餐组合(LCP-18-java) 小扣在秋日市集选择了一家早餐摊位,一维整型数组 staple 中记录了每种主食的价格,一维整型数组 drinks 中记录了每种饮料的价格.小扣的计划选择一份主食和一 ...

  9. scratch早餐组合 电子学会图形化编程scratch等级考试四级真题和答案解析2022年3月

    目录 scratch早餐组合 一.题目要求 1.准备工作 2.功能实现 二.案例分析

最新文章

  1. ios5中apple增加了解析JSON的api——NSJSONSerialization。
  2. WiFi安全那些事儿,整理推荐~
  3. 同步控制 之“重入锁”
  4. 数据工程师妹子养成手记——数据库篇
  5. 遍历线索化二叉树+图解
  6. 计算机网络基础常考简答题,计算机网络基础知识简答题
  7. 先排序,再限定记录数,然后计算指定字段的总和
  8. java反射class文件_Java反射(一)Class
  9. OpenCV精进之路(七):图像变换——重映射与仿射变换
  10. open表和closed表_什么是左外连接?左外连接在工作表查询中的应用
  11. linux常用命令(入门)
  12. 如何解决VC 应用程序无法启动,因为应用程序的并行配置不正确 sxstrace.exe问题...
  13. Python绘制图像plt与正余弦正切函数以及散点图DIY基本操作整理Matplotlib 教程
  14. 华为员工离职心声:菊厂15年退休,感恩公司,让我实现了财务自由!
  15. 时空序列预测模型之PredRNN(用ST-LSTM的预测学习循环神经网络)
  16. PHP PYTHON RUBY PERL
  17. 像元二分模型计算植被覆盖度
  18. 【GIS小案例】点聚合效果的实现
  19. 国产电源厂家及具体型号pin-to-pin替代手册
  20. Spring中的切入点表达式写法

热门文章

  1. slam14讲 |二、三维空间刚体运动
  2. SQL分页 查询6到10名等
  3. Python 【Litte Tips】如何优雅地跳出双层循环
  4. golang将静态资源文件打包进二进制文件
  5. VR 效果 前端使用 three.js 加载 Obj,drc文件(三维模型文件)
  6. 今日作息及食谱(7.1)
  7. crsd.bin Fail With Error CRS-1019 When ohasd Restarted (文档 ID 2291799.1)
  8. 原版windows下载安装方法
  9. anaconda 安装第三方库
  10. 吃辣的食物降低免疫力