文章目录

  • 一、题目
    • 1、题目描述
    • 2、基础框架
    • 3、原题链接
  • 二、解题报告
    • 1、思路分析
    • 2、时间复杂度
    • 3、代码详解
  • 三、本题小知识
  • 四、加群须知

一、题目

1、题目描述

  小扣在秋日市集选择了一家早餐摊位,一维整型数组 staple 中记录了每种主食的价格,一维整型数组 drinks 中记录了每种饮料的价格。小扣的计划选择一份主食和一款饮料,且花费不超过 xxx 元。请返回小扣共有多少种购买方案。
  样例输入: staple = [10,20,5], drinks = [5,5,2], x = 15
  样例输出: 6

2、基础框架

  • C语言 版本给出的基础框架代码如下:
int breakfastNumber(int* staple, int stapleSize, int* drinks, int drinksSize, int x){}

3、原题链接

LeetCode LCP 18. 早餐组合

二、解题报告

1、思路分析

  1)首先,对 drinks 数组进行递增排序;
  2)枚举 staple 其中一个 iii,记为 now=staple[i]now = staple[i]now=staple[i];
  3)目标是找到 now+drinks[j]≤xnow + drinks[j] \le xnow+drinks[j]≤x 的最大的 jjj,所以这里我们可以令 drinks[j]≤x−nowdrinks[j] \le x - nowdrinks[j]≤x−now 为红色部分,drinks[j]>x−nowdrinks[j] \gt x - nowdrinks[j]>x−now 为绿色部分;
  4)利用二分枚举找到红色的右边界 rrr,累加 r+1r + 1r+1;

2、时间复杂度

  总的时间复杂度为 O(nlog2n)O(nlog_2n)O(nlog2​n)。

3、代码详解


/************** 二分查找 数组 模板 **************/
/*1)传参的数组满足:红红红红红红红红绿绿绿绿绿绿绿; 2)返回值:绿色区段的左边界;
*/int isGreen(int val, int x);int binarySearch(int *arr, int arrSize, int x) {int l = -1, r = arrSize;int mid;while(l + 1 < r) {mid = l + (r - l) / 2;if( isGreen(arr[mid], x) )r = mid;elsel = mid;}return r;
}
/************** 二分查找 数组 模板 **************/int isGreen(int val, int x) {return val > x;
}#define mod 1000000007int cmp(const void *a, const void *b) {return *((int *)a) - *((int *)b);
}
int breakfastNumber(int* staple, int stapleSize, int* drinks, int drinksSize, int x){int i, r, sum = 0;qsort(drinks, drinksSize, sizeof(int), cmp);              // (1)for(i = 0; i < stapleSize; ++i) {                         // (2)r = binarySearch(drinks, drinksSize, x - staple[i]);  // (3)sum += r;                                             // (4)if(sum >= mod) sum -= mod;                            // (5)}return sum;
}
  • (1)(1)(1) 排序,让饮料有序;
  • (2)(2)(2) 线性枚举主食;
  • (3)(3)(3) 寻找满足最大的饮料编号;
  • (4)(4)(4) 加上饮料个数;
  • (5)(5)(5) 取模;

三、本题小知识

   线性枚举配合二分枚举是一般解题的常用手段。


四、加群须知

  相信看我文章的大多数都是「 大学生 」,能上大学的都是「 精英 」,那么我们自然要「 精益求精 」,如果你还是「 大一 」,那么太好了,你拥有大把时间,当然你可以选择「 刷剧 」,然而,「 学好算法 」,三年后的你自然「 不能同日而语 」
  那么这里,我整理了「 几十个基础算法 」 的分类,点击开启:

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

  1. LeetCode LCP 18. 早餐组合 JAVA

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

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

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

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

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

  4. LCP 18.早餐组合

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

  5. LCP 18. 早餐组合

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

  6. LeetCode 18. 早餐组合

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

  7. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

  8. 通讯录排序 (20分)_算法入门篇:简单的排序算法

    作者:dorseyCh来源:http://www.imooc.com/article/264180 很久之前有过一次面试,被问到一个问题,能不能写一个冒泡排序?说实话,尽管在这之前曾经写过不少比这个更 ...

  9. 【Python】【难度:简单】Leetcode LCP 02. 分式化简

    有一个同学在学习分式.他需要将一个连分数化成最简分数,你能帮助他吗? 连分数是形如上图的分式.在本题中,所有系数都是大于等于0的整数. 输入的cont代表连分数的系数(cont[0]代表上图的a0,以 ...

最新文章

  1. Git查看、删除、重命名远程分支和tag【转】
  2. spark之13:提交应用的方法(spark-submit)
  3. tt协议号服务器,TTIot: TTIoT云端物联网Iot组件;面向JAVA;netty;mqtt;异步推送;以事件为驱动;为设备提供安全可靠的连接通信能力;...
  4. Python笔记-相关性分析(连续变量和分类变量)
  5. 拳王虚拟项目公社:最新创业好项目有哪些,90后创业好项目,虚拟资源兼职副业好项目
  6. 如何更换清华源_树莓派中国软件源
  7. 前端性能毫秒必争综合方案
  8. Skype for Business 2015全新部署_07.前端安装02
  9. paip.c语言gtk开发环境CodeBlocks /QT建立最佳实践
  10. kettle教程-Windows下安装及简单使用
  11. java实现lbs_如何在 Java 中利用 redis 实现 LBS 服务
  12. 安徽大学计算机专硕学几年,安徽大学专业硕士学制几年
  13. java 模拟登陆人人网_java模拟登陆人人,通过验证码
  14. 百度地图api使用时标注图标显示不出来
  15. 冷暖自知!史玉柱:巨人失败时,找一圈朋友借钱被拒,但幸亏如此
  16. 浙江大学 找出直系亲属(java)
  17. pandas.melt()详解
  18. 在maven中的pom.xml配置ojdbc报错
  19. 计算机的硬件系统和软件系统
  20. java学习笔记——springmvc 之 数据自定义转换器 数据格式化 JSR303数据校验返回与接收JSON(@RequestBody 和 @ResponseBody)

热门文章

  1. 机器学习算法工程师面试总结(基于个人简历自用)
  2. R语言使用xgboost包拟合xgboost回归模型、使用predict函数和训练好的模型进行预测推理、计算回归模型的评估指标MAE、MSE、RMSE
  3. 【踩坑合辑】pycharm远程连接服务器
  4. 华为商城 删除订单_顶级对决!iPhone12开售排队 余承东暗讽苹果!iPhone12和华为Mate40你选哪个?...
  5. 坦克大战C语言实现(课程设计)
  6. Android隐私沙盒来了!
  7. excel不显示0_【208期】根据身份证号计算退休年龄时长高亮提醒,EXCEL做到了
  8. Springboot 整合 quartz
  9. [Luogu2901][USACO08MAR]牛慢跑Cow Jogging Astar K短路
  10. 店铺新品没有流量怎么办?店铺新品如何引流?