当前位置: 首页 > news >正文

【Leetcode 每日一题 - 扩展】2517. 礼盒的最大甜蜜度

问题背景

给你一个正整数数组 p r i c e price price,其中 p r i c e [ i ] price[i] price[i] 表示第 i i i 类糖果的价格,另给你一个正整数 k k k
商店组合 k k k不同 糖果打包成礼盒出售。礼盒的 甜蜜度 是礼盒中任意两种糖果 价格 绝对差的最小值。
返回礼盒的 最大 甜蜜度。

数据约束

  • 2 ≤ k ≤ p r i c e . l e n g t h ≤ 1 0 5 2 \le k \le price.length \le 10 ^ 5 2kprice.length105
  • 1 ≤ p r i c e [ i ] ≤ 1 0 9 1 \le price[i] \le 10 ^ 9 1price[i]109

解题过程

最大化最小值,考虑二分答案。
左端点的闭区间初始值为 1 1 1,这种情况相当于所有连续整数都选择到,肯定是符合定义的,但是不一定满足最大的要求。
右端点的开区间初始值,若数组长度用 n n n 来表示,根据 p r i c e [ 0 ] + ( k − 1 ) ∗ t a s t i n e s s ≤ p r i c e [ n − 1 ] price[0] + (k - 1) * tastiness \le price[n - 1] price[0]+(k1)tastinessprice[n1] 可以得到甜蜜度 t a s t i n e s s tastiness tastiness 的上界为 ⌊ p r i c e [ n − 1 ] − p r i c e [ 0 ] k − 1 + 1 ⌋ \lfloor \frac{price[n - 1] - price[0]}{k - 1} + 1 \rfloor k1price[n1]price[0]+1
最后确定移动范围的条件,用当前考虑的值实际地进行计算,判断是否满足要求就可以了。

具体实现

class Solution {
    public int maximumTastiness(int[] price, int k) {
        // 注意数组要进行排序,不然不符合二分有序的前提
        Arrays.sort(price);
        // 标准二分框架,相应地修改范围和
        int left = 1;
        int right = (price[price.length - 1] - price[0]) / (k - 1) + 1;
        while (left < right) {
            int mid = left + ((right - left) >>> 1);
            if (check(price, mid) >= k) {
                left = mid + 1;
            } else {
                right = mid;
            }
        }
        return left - 1;
    }

    // 用当前的甜蜜度,实际计算能够放多少类
    private int check (int[] price, int tastiness) {
        int res = 1;
        int pre = price[0];
        for (int item : price) {
            if (item >= pre + tastiness) {
                res++;
                pre = item;
            }
        }
        return res;
    }
}

相关文章:

  • pgAdmin 4 启动 PSQL Tool
  • Android车机DIY开发之软件篇(十六)编译forlinx i.mx8mplus Android
  • 【进阶】Java并发编程超详讲解!!!
  • The First项目报告:探索比特币质押协议Solv Protocol
  • Postman如何流畅使用DeepSeek
  • 【开源免费】基于SpringBoot+Vue.JS中国陕西民俗网站(JAVA毕业设计)
  • 多模态本地部署和ollama部署Llama-Vision实现视觉问答
  • 【Spring Boot】Spring 魔法世界:Bean 作用域与生命周期的奇妙之旅
  • 上下文编辑器在不同场景下的功能(含使用案例)
  • LeetCode--146. LRU 缓存【Golang中的list】
  • patch-package的实现基本原理
  • deepseek接入pycharm 进行AI编程
  • 深度学习-113-RAG技术之基于Langchain和Streamlit搭建本地私人知识库提升效果
  • 【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十七节】
  • Python基于Django的漏洞扫描系统【附源码、文档说明】
  • conda介绍及常用命令举例
  • 【IoTDB 线上小课 11】为什么 DeepSeek 要选择开源?
  • 查看 redis 主从数据库之间的延迟情况
  • 什么关系型数据库和非关系型数据库
  • Java 单元测试框架之 Mockito 详细介绍
  • 视频丨习近平主席专机抵达莫斯科,俄战机升空护航
  • 商务部新闻发言人就中美经贸高层会谈答记者问
  • 蓝佛安:中方将采取更加积极有为的宏观政策,有信心实现今年5%左右增长目标
  • 默茨在德国联邦议院第一轮投票中未能当选总理
  • 黄道炫:南京102天——黄镇球的防空日记
  • 抗战回望16︱《青年生活》《革命青年》:抗战与青年