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

力扣410. 分割数组的最大值

在这里插入图片描述
这一题的大意是说给出一个正整数数组,和一个整数k,现在让我们划分出k个区间,使得这些子数组区间中的最大值最小。换句话说,就是分成的k个区间中,肯定有一个子数组的和是最大值,希望让这个最大值最小。
看到最大值最小这种字眼,很明显的二分答案,即我们用二分的方式猜这个最大值,
假设这个最大值为x,
那么我们在check数组中验证最大值为x时,是否能够形成小于等于k个子数组,如果能,那么就符合,我们继续二分,希望这个x更小,使得符合最小化最大值的条件。
这里的判断方法经常用到:

力扣1760. 袋子里最少数目的球
力扣2064. 分配给商店的最多商品的最小值

都类似
完整代码如下:

class Solution {
public:bool check(long long x,vector<int>& nums,int k){//将这这个数组分为k分// 使它们中的最大值最小int sum=0;int cnt=1;for(int i=0;i<nums.size();i++){if(sum+nums[i]>x){sum=nums[i];cnt++;if(cnt>k){return false;}continue;}else{sum+=nums[i];}}return true;}int splitArray(vector<int>& nums, int k) {//nums// 最小化最大值int n=nums.size();int sum=0;for(int i=0;i<nums.size();i++){sum+=nums[i];}int l=*max_element(nums.begin(), nums.end());;long long r=sum;long long ans=INT_MAX;while(l<=r){long long mid=(l+r)/2;if(check(mid,nums,k)){ans=min(ans,mid);r=mid-1;}else{l=mid+1;}}return ans;}
};

我们要注意的是这里的l必须是数组中的最大值,如果过小会出错,为什么l要是数组中的最大值
因为我们二分的对象就是数组中的最大值,如果是不符合最大值但仍然在数组中,那么它有可能也符合check函数的条件,但很明显不符合最大值的要求,而子数组的最大值左边界就是一种极端情况,
任何合法的最大分段和(我们要二分的目标值)一定要 ≥ 数组中最大的单个元素。因为如果连数组中的单个最大值都放不下,那么很明显无非划分成子数组。
这里用来找一个数组中的最大值用的是

*max_element(nums.begin(), nums.end());

需要会用,比较方便。
时间复杂度为O(nlogn)

http://www.dtcms.com/a/546872.html

相关文章:

  • 做购物网站能赚钱吗wordpress侧边栏固定
  • 上海企业制作网站有哪些内容动漫制作技术专业常识
  • JDBC 连接数据库 详细操作---可远程连接别人数据库
  • 沈阳做企业网站红网
  • 温州网站建设方案托管广州微信小程序开发工作室
  • 有一个网站专门做民宿广西网站建设开发外包
  • 家政服务网站建设方案佛山建站模板搭建
  • 企业建筑网站typecho移植wordpress
  • Rust:零成本抽象下的内存安全与高性能实践
  • 做综合类网站好不好wordpress 实战视频教程
  • 广东省城乡建设厅投诉网站wordpress提交360
  • 网站关键词下降服务器安全卫士
  • Vue3+Element-plus 切换表格表头展示/隐藏
  • 企业网站色彩四川大良网站建设
  • 网站添加qq聊天学生怎么做网站
  • 酥糖的网站建设的目的是什么南宁网站建设公司排名
  • 上海官方网站建设网站搭建 商城 seo
  • wordpress 标签样式容城轻松seo优化排名
  • 网站谁做的比较好网站建设心得小结
  • 辽宁建设工程信息网官网新网站如何进入手册设计
  • 抖音代运营费用一年多少钱怀化seo推广
  • ROS2系列 (8) : Python话题通信节点——发布者示例
  • 公司做网站找谁wordpress显示文章时分秒代码
  • dp与px转换原理
  • 网站开发推广方案策划书网站seo规范
  • 那个网站做二手车好沙洋网站定制
  • 权限管理混乱会造成哪些安全隐患
  • 官方网站建设必要性网站建设维护与管理实训总结
  • 《Zookeeper 常用命令手册:客户端操作、集群管理与监控指令》
  • 浙江电商网站建设销售百度投流运营