入门力扣自学笔记268 C++ (题目编号:2517)

news/2024/11/29 11:48:48/

2517. 礼盒的最大甜蜜度

题目:

给你一个正整数数组 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


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


思路:

看到找最大值的最小值/最小值的最大值就可以想到二分,因为这类问题容易找到单调关系从而进行二分搜索。

本题的单调关系即为: 袋子里的糖果k越多, 答案ans会越小 (因为绝对差会变小)。

存在单调关系后,就可以用二分搜索了。

在每一步中,对于给定的答案ans,我们检查能否在k步内达到。如果可以的话,说明当前的y并非在袋子中放入k个糖果能够达到的最小值。令right = mid - 1搜索左侧。如果不可以的话,说明当前的y需要至少k+1个糖果才能达到,不符合题意,令right = mid + 1搜索右侧。


代码:

class Solution {
public:// check if current value (sweetness) is valid for k candiesbool check(vector<int>& price, int val, int k) {int count = 1;int preVal = price[0];for (size_t i = 1; i < price.size(); i++) {if (price[i] >= preVal + val) {count++;preVal = price[i];}}return count < k;}// binary searchint maximumTastiness(vector<int>& price, int k) {sort(price.begin(), price.end());int left = 0;int right = price[price.size() - 1] - price[0];int ans = right;while (left <= right) {int mid = left + (right - left) / 2;if (check(price, mid, k)) {right = mid - 1;} else {ans = mid;left = mid + 1;}}return ans;}
};


http://www.ppmy.cn/news/141047.html

相关文章

得物人事系统时间轴设计的演化历程

1 什么是时间轴 ~&#xff08;以上图片出自电影《星际穿越》&#xff09;~ 如果你看过《星际穿越》&#xff0c;应该对这一幕印象深刻&#xff0c;女儿墨菲所处的房间&#xff0c;按照时间分为了无数个三维空间实体。三维空间加时间组合成四维空间&#xff0c;即时空。 时间轴…

Spring Cloud Alibaba 整合Seata 之概念介绍及Seata-server搭建

目录 前言 基础介绍 官方文档 模式分类 角色介绍 Seata Server 部署 - docker-compose 数据库 服务器 docker-compose.yaml nacos配置 启动 前言 Seata 是 阿里巴巴 开源的 分布式事务中间件&#xff0c;以 高效 并且对业务 0 侵入 的方式&#xff0c;解决 微服务…

前端测试:单元测试

为什么进行测试 你是否有以下烦恼&#xff1a; 当你加班加点完成一个功能后&#xff0c;提交给测试部&#xff0c;立马返回几个bug 当你修改完bug后&#xff0c;并检查了好几遍&#xff0c;确保无误后&#xff0c;提交给测试部&#xff0c;有返回几个bug …… 对于以上情境…

装机 —— 主板

CPU、内存、固态、硬盘、网卡、声卡等硬件都是需要插到主板上的&#xff0c;主板就是为了承载和连通硬件&#xff0c;使其一起工作。接下来了解下如何选择一款好的主板。 1. 支持的平台 选主板最大的坑在于 Intel 和 AMD 这两款 CPU 的主板是不同的&#xff0c;无法兼容。如果…

x570主板怎么样 x570主板支持的cpu

X570是AMD锐龙系列CPU非常热门的搭配选项&#xff0c;也是AM4接口的旗舰主板&#xff0c;大家如果选择AMD锐龙5000系列的话&#xff0c;那么主板搭配一般不是B650就是X570&#xff0c;对比B650来说X570的规格更高而且支持超频&#xff0c;X570主板比较适合的搭配是锐龙R7或者R9…

intel AMD平台主板等级分类

intel平台的主板芯片组 市面上常见的有X Z B H 4个等级 不同等级搭配的CPU也有所不同 X 级定位发烧级 一般搭配的CPU性能十分强悍&#xff0c;例如目前在售的X299主板有2066个针脚&#xff0c;可搭配i9 7920X /i9-7980XE等处理器使用&#xff0c;价格昂贵。 Z 级定位高端级别 是…

如何选购电脑主板?

市场上的主板根据支持的CPU类型的不同&#xff0c;一般可以分为支持Intel CPU的和支持AMD CPU的两类。不论是何种类型的主板&#xff0c;选购主板时可以考虑以下几方面。 PCB板的做工 主板做工的精细程度&#xff0c;会直接影响主板的稳定性。因此在挑选主板时&#xff0c;必须…

html5电脑配置,H310C主板福音来临!八代奔腾G5400核显组装电脑配置清单及价格

相信不少用户对于八代装机&#xff0c;或多或少有点抱怨&#xff0c;例如DDR4内存、H310主板有些偏贵&#xff0c;不支持Win7系统等。但是最近intel推出了H310C主板&#xff01;这款主板价格便宜不说&#xff0c;全面支持Win7系统&#xff0c;还支持DDR3内存&#xff0c;对于八…