​LeetCode解法汇总2517. 礼盒的最大甜蜜度

news/2024/7/1 2:50:10

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

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

解题思路:

* 解题思路:
* 对数组进行排序,就可以知道两两之间的差值。
* 最大的差值就是price[price.length-1] - price[0]=right。最小的差值假设就是left。
* 求最大甜蜜度时,我们使用二分查找,首先尝试middle = (left + right)/2是否可行,
* 如果可行,则继续尝试首先尝试(middle+1+right)/2
* 如果不可行,则继续尝试(left+middle-1)/2

代码:

class Solution {
public:
    /**
 * 看sweetValue是否满足要求
 */
bool check(vector<int> &price, int k, int sweetValue)
{
    int leftIndex = 0;
    for (int i = 0; i < price.size(); i++)
    {
        int sum = price[i] - price[leftIndex];
        if (sum >= sweetValue)
        {
            leftIndex = i;
            k--;
        }
        if (k == 0)
        {
            return true;
        }
    }
    return false;
}

int maximumTastiness(vector<int> &price, int k)
{
    sort(price.begin(), price.begin() + price.size());
    int abs = 0;
    int left = 0;
    int right = price[price.size() - 1] - price[0];
    while (left <= right)
    {
        int middle = (left + right) / 2;
        if (check(price, k - 1, middle))
        {
            left = middle + 1;
            abs = middle;
        }
        else
        {
            right = middle - 1;
        }
    }
    return abs;
}
};


http://lihuaxi.xjx100.cn/news/1193534.html

相关文章

01-项目介绍

1、特色与亮点 千万级流量的大型分布式系统架构设计。 高性能、高并发、高可用场景解决方案。 2、项目安排 架构搭建&#xff0c;使用前后端分离架构。 功能开发&#xff0c;实现基本的选座排队购票功能。 引入高并发技术&#xff0c;实现高性能抢票。 3、项目收获 学习…

部署rabbitmq3.10.6详细步骤

RabbitMQ简介 RabbitMQ是Erlang开发的&#xff0c;集群非常方便&#xff0c;因为Erlang天生就是分布式语言&#xff0c;但其本身并不支持负载均衡&#xff0c;支持高并发&#xff0c;支持可扩展。支持AJAX&#xff0c;持久化&#xff0c;用于在分布式系统中存储转发消息&#x…

RustChinaConf 2023官网上线,精彩议题早知道

随着大会日益临近&#xff0c;我们RustChinaConf 2023筹备委员会的工作也在有条不紊的进行中。最新的好消息来了&#xff0c;官网已上线&#xff0c;访问地址&#xff1a; https://rustcc.cn/2023rustchinaconf/ 从官网进去也可以报名&#xff01; 大会时间地址 6.17 - 6.1…

jira中issue状态的改变触发jenkins job构建

背景&#xff1a;想通过监控jira中 issue状态的变化去触发jenkins job的构建 在jenkins中安装插件&#xff1a;JIRA Trigger plugin. 下载地址&#xff1a;https://plugins.jenkins.io/jira-trigger/ 在Jenkins-> Manage Jenkins -> Configure System -> JIRA Trigg…

【蓝桥杯算法题】python编写一个科学计算器可以完成加减乘除、平方、平方根、立方、立方根的计算

python编写一个科学计算器可以完成加减乘除、平方、平方根、立方、立方根的计算 首先&#xff0c;在代码开头我们导入了math模块。math是Python标准库中提供的一个数学模块&#xff0c;里面包含了许多数学函数和常量&#xff0c;比如三角函数&#xff08;sin、cos、tan等&…

RISC-V 学习篇之特权架构下的中断异常处理

RISC-V 学习篇之特权架构下的中断异常处理 控制流和Trap特权架构简单的嵌入式系统的机器模式机器模式下的异常处理mtvec&#xff08;Machine Trap-Vector Base-Address&#xff09;mepc&#xff08;Machine Exception Program Counter)mcause&#xff08;Machine Cause&#xf…

设计模式详解之策略模式

作者&#xff1a;刘文慧 策略模式是一种应用广泛的行为型模式&#xff0c;核心思想是对算法进行封装&#xff0c;委派给不同对象来管理&#xff0c;本文将着眼于策略模式进行分享。 一、概述 我们在进行软件开发时要想实现可维护、可扩展&#xff0c;就需要尽量复用代码&#x…

18. Vue-element-template白天黑夜模式动态切换

两套主题动态切换 1. 去官网生成两套主题拷贝到 resources/src/assets/theme https://element.eleme.cn/#/zh-CN/theme 2. 也可以本地修改 element-variables.scss 然后运行et生成 安装 &#xff08;注意Node版本&#xff09; ➜ Genes-Admin git:(ogenes) sudo n 10.16.…