二分查找--最大化最小值

二分查找–最大化最小值

题目描述–LeetCode5111

你有一大块巧克力,它由一些甜度不完全相同的小块组成。我们用数组 sweetness 来表示每一小块的甜度。

你打算和 K 名朋友一起分享这块巧克力,所以你需要将切割 K 次才能得到 K+1 块,每一块都由一些 连续 的小块组成。

为了表现出你的慷慨,你将会吃掉 总甜度最小 的一块,并将其余几块分给你的朋友们。

请找出一个最佳的切割策略,使得你所分得的巧克力 总甜度最大,并返回这个 最大总甜度。

示例 1:

输入:sweetness = [1,2,3,4,5,6,7,8,9], K = 5
输出:6
解释:你可以把巧克力分成 [1,2,3], [4,5], [6], [7], [8], [9]。
示例 2:

输入:sweetness = [5,6,7,8,9,1,2,3,4], K = 8
输出:1
解释:只有一种办法可以把巧克力分成 9 块。
示例 3:

输入:sweetness = [1,2,2,1,2,2,1,2,2], K = 2
输出:5
解释:你可以把巧克力分成 [1,2,2], [1,2,2], [1,2,2]。

简单地说就是把一个数组划分成连续的K+1段,使和最小的一段经可能的大,即最大化最小值

题目分析

在本题中,我们不知道这个最大的最小值是多少,因此可以猜测为该值为 m,然后对m进行检验,如果原数组可以顺利的按照m划分,能够分出k+1段和大于等于m的连续子数组,则认为m合法。

那么如何猜测这个值呢?用二分的思想:

二分查找要求被查找的序列具有单调性,数组分的次数越多,每段和就越小,就越有可能满足要求。正是基于这一单调的线性关系,将最优化问题转换为判定问题

具体地说:

如果测试发现当前的值能够满足将数组切分为k+1个子数组时,则这时应将当前的值进行增加,如果测试发现当前设置的最大值不能满足刚好将数组切分成为小于K+1个子数组,则表示当前测试的值设置过大,应将测试数进行缩小

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值