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

D.二分查找-二分答案-最小化最大值——410. 分割数组的最大值(模板题)

题目链接:410. 分割数组的最大值(困难)

算法原理:

解法:二分查找+贪心

0ms击败100.00%

时间复杂度O(Nlogn)

①目标变量:每个数组的和(最大值)

②目标条件:将数组分成k份,找一个数当每个数组和的最大值,这个数要最小化

③转换逻辑:是否能将nums分割为≤k个子数组,且每个子数组的和都≤mid

具体步骤:

①确定边界:

left:数组中最大元素,因为每个子数组至少一个元素,最大值不可能比最大元素小

right:数组元素和,因为k=1时,只能是整个数组的和

②确定二分模型: 分的段数 ↑ 元素和的最大值 ↓ ,呈负相关单调,由于是找最小的最大值,因此采用最左端点模型

③check方法设计:这里采用贪心策略来验证:在给定最大子数组和限制mid下,能否将数组分割成不超过k个连续子数组

贪心的核心想法:尽可能把更多元素塞进当前子数组,找到满足条件的最少元素数量,如果这个数量≤k,则说明可行

1.初始化:

子数组计数cnt=1,因为数组至少是一个子数组

当前子数组累加和sum=0

2.遍历数组:对于每个数x

如果sum+x≤mid,将x加入当前子数组,继续下一个元素

否则就新开个数组,新数组和重置为x

再在中间加个判断:如果子数组已经到了k个,那么直接返回false

3.返回true

答疑

Q1:那要是k太大了,分不成k组呢?那这个贪心不就错了吗?

题目已经明确说明了1 <= k <= min(50, nums.length),因此不可能存在这种情况,贪心没问题

Java代码:

class Solution { public int splitArray(int[] nums, int k) { int left=0,right=0; for(int x:nums){ left=Math.max(left,x); right+=x; } while(left<right){ int mid=left+(right-left)/2; if(!check(mid,nums,k)) left=mid+1; else right=mid; } return left; } //判断是否能将nums分割为≤k个子数组,且每个子数组的和都≤mid private boolean check(int mid,int[] nums, int k){ //当前子数组累加和 int sum=0; //子数组计数,初始为1(至少一个子数组) int cnt=1; for(int x:nums){ if(sum+x<=mid){ sum+=x; continue; } if(cnt==k) return false; cnt++; sum=x; } return true; } }
http://www.jsqmd.com/news/376136/

相关文章:

  • 2026年评价高的次氯酸水发生器公司推荐:次氯酸钠投加装置、次氯酸钠消毒设备、次氯酸钠设备、次氯酸钠除臭设备、电解次氯酸钠发生器选择指南 - 优质品牌商家
  • 混合储能系统及其Simulink模型并网研究
  • python双目三维重建系统项目 双目标定,立体校正,双目测距,三维重建 该项目旨在带你了解三...
  • 改进动态窗口DWA算法,模糊控制自适应调整评价因子权重,matlab代码 这段代码是一个基于动...
  • 基于输入整形的双惯量系统末端抖动低频机械谐振抑制仿真探索
  • 2026年二氧化氯发生器厂家权威推荐榜:次氯酸钠消毒设备/次氯酸钠设备/次氯酸钠除臭设备/电解次氯酸钠发生器/电解法二氧化氯发生器/选择指南 - 优质品牌商家
  • 2026年百度地图会员服务商厂家权威推荐榜:百度品牌广告服务商、百家号服务商、百度地图会员服务商、百度爱采购服务商选择指南 - 优质品牌商家
  • 2026年腰椎间盘突出治疗厂家推荐:非手术治疗腰椎间盘突出、颈椎紊乱、颈椎间盘突出、高低肩、脊柱侧弯、脊柱小关节紊乱选择指南 - 优质品牌商家
  • 2026年百度爱采购服务商厂家推荐:百家号服务商/百度地图会员服务商/百度品牌广告服务商/百度爱采购服务商/百度推广服务商/选择指南 - 优质品牌商家
  • “DDD” VS DDD:怎么防止系统变“老”?
  • 2026年百度推广服务商公司权威推荐:百家号服务商/百度地图会员服务商/百度爱采购服务商/百度品牌广告服务商/百度推广服务商/选择指南 - 优质品牌商家
  • Flink从入门到上天系列第四篇:安装Hadoop配置yarn
  • 教授专栏199 |訾云龙: 让机器人拥有人类的精细触觉
  • 8-10 WPS JSA 正则表达式:贪婪匹配
  • 人形机器人日报|Apptronik A轮融到9.35亿刀,哥大让机器人学会说人话
  • Windows系统管理工具V9.53绿色优化版,附带实用工具箱,已调整功能优化,windows系统优化管理工具
  • 提示工程架构师实战:为VR教育场景设计提示系统的“教-学-练”闭环
  • 8-11 正则表达试 贪婪匹配应用-提取身份证日期
  • 【实测好用】Windows超级管理器绿色优化版,windows系统垃圾清理、系统信息查看、系统优化
  • C++数据结构与算法_线性表_数组_概念动态数组,刷题
  • 别再硬扛传统Flink监控了!Strands Agents让智能分析与优化建议一步到位!
  • 【2026亲测】6大方法彻底禁止Windows11自动更新,让电脑关闭系统自动更新!
  • STL容器轻量级实现(施工中)
  • 数据库系统概论第四章数据库安全性
  • 希音 shein x-gw-auth
  • windows系统工具箱集合,windows系统工具启动器,不用再记工具的快捷命令
  • 2026年电子元件回收厂家最新推荐:电子元器件库存回收/二手电子元器件回收/报废电子元器件回收/电子元器件回收公司/选择指南 - 优质品牌商家
  • 希音 web 采集
  • 2026年气动马达公司权威推荐:ober气动马达、减速气动马达、小型气动马达、微型叶片式气动马达、微型气动马达选择指南 - 优质品牌商家
  • Zookeeper在大数据领域数据可视化中的应用思路