【2517. 礼盒的最大甜蜜度】
来源:力扣(LeetCode)
描述:
给你一个正整数数组 price
,其中 price[i]
表示第 i
类糖果的价格,另给你一个正整数 k
。
商店组合 k
类 不同 糖果打包成礼盒出售。礼盒的 甜蜜度 是礼盒中任意两种糖果 价格 绝对差的最小值。
返回礼盒的 最大 甜蜜度。
示例 1:
输入:price = [13,5,1,8,21,2], k = 3
输出:8
解释:选出价格分别为 [13,5,21] 的三类糖果。
礼盒的甜蜜度为 min(|13 - 5|, |13 - 21|, |5 - 21|) = min(8, 8, 16) = 8 。
可以证明能够取得的最大甜蜜度就是 8 。
示例 2:
输入:price = [1,3,1], k = 2
输出:2
解释:选出价格分别为 [1,3] 的两类糖果。
礼盒的甜蜜度为 min(|1 - 3|) = min(2) = 2 。
可以证明能够取得的最大甜蜜度就是 2 。
示例 3:
输入:price = [7,7,7,7], k = 2
输出:0
解释:从现有的糖果中任选两类糖果,甜蜜度都会是 0 。
提示:
- 1 <= price.length <= 105
- 1 <= price[i] <= 109
- 2 <= k <= price.length
方法:贪心 + 二分查找
思路
礼盒的甜蜜度是 k 种不同的糖果中,任意两种糖果价格差的绝对值的最小值。计算礼盒的甜蜜度时,可以先将 k 种糖果按照价格排序,然后计算相邻的价格差的绝对值,然后取出最小值。
要求甜蜜度的最大值,可以采用二分查找的方法。先假设一个甜蜜度 mid,然后尝试在排好序的 price 中找出 k 种糖果,并且任意两种相邻的价格差绝对值都大于 mid。如果可以找到这样的 k 种糖果,则说明可能存在更大的甜蜜度,需要修改二分查找的下边界;如果找不到这样的 k 种糖果,则说明最大的甜蜜度只可能更小,需要修改二分查找的上边界。
在假设一个甜蜜度 mid 后,在排好序的 price 中找 k 种糖果时,需要用到贪心的算法。即从小到大遍历 price 的元素,如果当前糖果的价格比上一个选中的糖果的价格的差大于 mid,则选中当前糖果,否则继续考察下一个糖果。
二分查找起始时,下边界为 0,上边界为 price 的最大值与最小值之差。二分查找结束时,即可得到最大甜蜜度。
代码:
class Solution {public:int maximumTastiness(vector<int>& price, int k) {int n = price.size();sort(price.begin(), price.end());int left = 0, right = price[n - 1] - price[0];while (left < right) {int mid = (left + right + 1) >> 1;if (check(price, k, mid)) {left = mid;} else {right = mid - 1;}}return left;}bool check(const vector<int> &price, int k, int tastiness) {int prev = INT_MIN >> 1;int cnt = 0;for (int p : price) {if (p - prev >= tastiness) {cnt++;prev = p;}}return cnt >= k;}
};
执行用时:132 ms, 在所有 C++ 提交中击败了98.21%的用户
内存消耗:47.2 MB, 在所有 C++ 提交中击败了83.33%的用户
复杂度分析
时间复杂度:O(nlogn+nlogC),其中 n 是数组 price 的长度,C 是数组 price 的最大值与最小值之差。排序的时间是 O(nlogn),二分查找的次数是 O(logC),每次查找的时间是 O(n)。
空间复杂度:O(logn),其中 n 是数组 price 的长度。为排序的空间复杂度。
author:LeetCode-Solution
【2517. 礼盒的最大甜蜜度】相关推荐
- 2.技巧※(0x3f:从周赛中学算法 2022)
来自0x3f[从周赛中学算法 - 2022 年周赛题目总结(下篇)]:https://leetcode.cn/circle/discuss/WR1MJP/ 技巧指一些比较套路的算法,包括双指针.滑动窗 ...
- 2022年七夕送女朋友什么礼物好?实用且好看的礼物推荐
眼看七夕马上就要到了,各位男生现在是不是特别发愁,要送女朋友什么七夕礼物.送七夕礼物这件事,看似很简单,其实很能反映一个人的品味跟共情能力.给女朋友送礼,更关系到你们的爱情甜蜜度指数哦!别着急,贴心的 ...
- 圣诞夜表白代码!看你答不答应
公众号[走神研究所]回复[表白]获取网站 这里有棵会动的圣诞树来帮助你表白噢! 圣诞节马上要到了,不知道有没有和你一起过节的人呢? 还没有?没关系,看看这个圣诞夜表白代码,发给你心仪的人,伴着音乐和动 ...
- 苹果手机壳_换种方式秀恩爱,苹果情侣手机壳让你甜到掉牙
对于机不离身的年轻人而言,用手机壳来秀恩爱,相信会是一种独特的"撒狗粮"方式.毕竟情侣衣服显得太过时,而手表配饰也没有那么多展露的场景,唯独手机是我们经常要拿出来的物品.当情侣在一 ...
- Python表白代码:太秀了,用过的人都找到了对象...【满屏玫瑰盛开】
导语 暗恋让人受尽委屈!一开始,你是我的秘密,我怕你知道,又怕你不知道,又怕你知道装作不知道! 这大概就是暗恋的感受吧,可若是双向奔赴,那简更是甜蜜度爆表,快同小编吃下这波狗粮! 跟着上一期的玫瑰花花 ...
- 2023.6.1每日一题
在求最小值中的最大值或最大值的最小值时,往往采用二分解决,这道题二分的对象就是甜蜜度.在二分之前首先对price进行升序排序,在二分初始化中:left=0,right=price[n-1]-price ...
- 情人节肉麻短信排行榜中榜
●如果世界只剩10分钟,我会和你一同回忆走过的风雨,如果世界只剩3分钟,我会深深吻你10次,如果世界只剩1分钟,我会说60次我爱你! 肉麻指数:☆☆☆☆☆ 评论:即使「明天过后」真实版上演,也要跟情人 ...
- 甜蜜助攻!情侣之间,到底能有多甜甜甜甜甜甜甜甜
▲ 点击查看 没有一丝丝防备,还有 5 天,七夕就要到了. 如何借「物」聊表爱意,大概是最近让很多拥有另一半的人头疼不已的问题. 重点是,礼物挑不好,小心七夕就变送命题! 女孩子们到底喜欢什么礼物? ...
- 甜蜜暴击,情人节插画素材,甜而不腻!
在这么甜的日子里,当然要甜蜜暴击一切,投递甜甜的爱情啊!这个情人节,你会怎么过呢?约会也好,在家也好,都不会减弱彼此的爱.你想象中最美好的爱情是什么样子的? 不同的人有不同的回答,插画里甜而不腻的爱情 ...
最新文章
- 图解Windows下使用SSH Secure Shell Client远程连接Linux
- php写的微信聊天界面,浅谈 聊天界面 核心架构设计
- Office Communication Server(OCS)2007 Communicator Web Access(CWA)的部署
- matlab寻找函数对应的工具箱
- 我的工作日报 - 2020-9-11 星期五
- 云服务器上mysql数据库环境安装配置
- html5录音怎么保存到本地,详解HTML5 录音遇到的坑
- Solaris上的开发环境安装及设置
- iOS中使用URL Scheme进行App跳转
- 不允许有匹配 “[xX][mM][lL]“ 的处理指令目标。
- java中的耦合_Java中的耦合
- python开发板 树莓派_树莓派3代B+型 Raspberry Pi 3b+电脑linux开发板python编程
- unbuntu配置scrcpy
- 如何用电脑下载微信视频号中的视频?
- python提取txt数据到excel
- 程序员们逢年过节初一十五都应该祭拜哪些神仙?
- 企业技术中心申报条件
- 使用python爬取招聘网站数据
- java jxl 写 excel文件_Java使用jxl包写Excel文件适合列宽实现
- 盲盒拓客商家联盟红包裂变抽奖源码
热门文章
- c语言sigsegv解决方法,关于SIGSEGV错误及处理方法(转)
- COSCon’22第七届中国开源年会火热筹备中,第一波赞助伙伴已集结,一起上车共赴开源盛宴吧~...
- 广西学子复读15年,不服从分配。网友:完全是浪费时间
- HTML标签fieldset
- 云计算服务商中云融信 十一月产品升级
- JavaScript基础 ( 3 章 )
- TeeChart VCL/FMX v2023 crack
- [乐意黎原创]npm run dev 时抛'cross-env' is not recognized as an internal or external command的解决方法
- ubuntu 18.04 安装无线驱动和显卡驱动
- c语言1.0.2父母的身高预测未来子女的身高