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;
提示:
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.优化
- 调用C库函数qsort(),先排序
- 进一步排列组合,减少组合次数,发现也超时
# 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.早餐组合相关推荐
- ⭐算法入门⭐《二分枚举》简单15 —— LeetCode LCP 18. 早餐组合
文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述 小扣在秋日市集选择了一 ...
- LCP 18. 早餐组合
小扣在秋日市集选择了一家早餐摊位,一维整型数组 staple 中记录了每种主食的价格,一维整型数组 drinks 中记录了每种饮料的价格.小扣的计划选择一份主食和一款饮料,且花费不超过 x 元.请返回 ...
- 【Leetcode】 LCP 18. 早餐组合(简单)
1. 题目 小扣在秋日市集选择了一家早餐摊位,一维整型数组 staple 中记录了每种主食的价格,一维整型数组 drinks 中记录了每种饮料的价格.小扣的计划选择一份主食和一款饮料,且花费不超过 x ...
- LeetCode LCP 18. 早餐组合 JAVA
小扣在秋日市集选择了一家早餐摊位,一维整型数组 staple 中记录了每种主食的价格,一维整型数组 drinks 中记录了每种饮料的价格.小扣的计划选择一份主食和一款饮料,且花费不超过 x 元.请返回 ...
- 【二分查找-简单】LCP 18. 早餐组合
题目 注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1 提示: 1 <= staple.length <= 10^ ...
- LeetCode 18. 早餐组合
LCP 18. 早餐组合 小扣在秋日市集选择了一家早餐摊位,一维整型数组 staple 中记录了每种主食的价格,一维整型数组 drinks 中记录了每种饮料的价格.小扣的计划选择一份主食和一款饮料,且 ...
- 【编程题】【Scratch四级】2022.03 早餐组合
早餐组合 小猫家附近的早餐店会供应两种饮料和四种点心,饮料和点心只能各选一种,问共有多少种不同的早餐搭配? 饮料:豆浆,牛奶 点心:蛋糕.油条.饼干.面包 1. 准备工作 (1)保留舞台白色背景和默认 ...
- 【早餐组合(LCP-18-java)】
早餐组合(LCP-18-java) 小扣在秋日市集选择了一家早餐摊位,一维整型数组 staple 中记录了每种主食的价格,一维整型数组 drinks 中记录了每种饮料的价格.小扣的计划选择一份主食和一 ...
- scratch早餐组合 电子学会图形化编程scratch等级考试四级真题和答案解析2022年3月
目录 scratch早餐组合 一.题目要求 1.准备工作 2.功能实现 二.案例分析
最新文章
- ios5中apple增加了解析JSON的api——NSJSONSerialization。
- WiFi安全那些事儿,整理推荐~
- 同步控制 之“重入锁”
- 数据工程师妹子养成手记——数据库篇
- 遍历线索化二叉树+图解
- 计算机网络基础常考简答题,计算机网络基础知识简答题
- 先排序,再限定记录数,然后计算指定字段的总和
- java反射class文件_Java反射(一)Class
- OpenCV精进之路(七):图像变换——重映射与仿射变换
- open表和closed表_什么是左外连接?左外连接在工作表查询中的应用
- linux常用命令(入门)
- 如何解决VC 应用程序无法启动,因为应用程序的并行配置不正确 sxstrace.exe问题...
- Python绘制图像plt与正余弦正切函数以及散点图DIY基本操作整理Matplotlib 教程
- 华为员工离职心声:菊厂15年退休,感恩公司,让我实现了财务自由!
- 时空序列预测模型之PredRNN(用ST-LSTM的预测学习循环神经网络)
- PHP PYTHON RUBY PERL
- 像元二分模型计算植被覆盖度
- 【GIS小案例】点聚合效果的实现
- 国产电源厂家及具体型号pin-to-pin替代手册
- Spring中的切入点表达式写法
热门文章
- slam14讲 |二、三维空间刚体运动
- SQL分页 查询6到10名等
- Python 【Litte Tips】如何优雅地跳出双层循环
- golang将静态资源文件打包进二进制文件
- VR 效果 前端使用 three.js 加载 Obj,drc文件(三维模型文件)
- 今日作息及食谱(7.1)
- crsd.bin Fail With Error CRS-1019 When ohasd Restarted (文档 ID 2291799.1)
- 原版windows下载安装方法
- anaconda 安装第三方库
- 吃辣的食物降低免疫力