给定一个非负整数数组和一个整数 m,你需要将这个数组分成 个非空的连续子数组。设计一个算法使得这 个子数组各自和的最大值最小。

注意:
数组长度 满足以下条件:

  • 1 ≤ n ≤ 1000
  • 1 ≤ m ≤ min(50, n)

示例:

输入:
nums = [7,2,5,10,8]
m = 2输出:
18解释:
一共有四种方法将nums分割为2个子数组。
其中最好的方式是将其分为[7,2,5][10,8],
因为此时这两个子数组各自的和的最大值为18,在所有情况中最小。

方法:二分法

第一点,被分成的m个子数组的最大值必在nums的最大值和nums的元素之和之中。

第二点,弱弱地猜猜看,拿所在区间范围的中间值去套,看看其能够得到多少个子区间数,如果说所得到的子区间数偏大于m,说明你划分的太小了,令左区间等于中间值加1,反之相反。

class Solution {
public:int splitArray(vector<int>& nums, int m) {int N = nums.size();int max = 0;int sum = 0;for(int i=0;i<N;++i){if(nums[i]>max)max = nums[i];sum += nums[i];}if(m==1)return sum;if(m==N)return max;int left = max, right = sum;while(left<right){int mid = (left+right)>>1;int cnt = 1;int value = 0;for(int i=0;i<N;++i){if(value+nums[i]>mid){value = 0;cnt++;}value += nums[i];}if(cnt>m){left = mid+1;}else{right = mid; }}return left;}
};

分割数组的最大值—leetcode410相关推荐

  1. 7、leetcode410 分割数组的最大值

    leetcode410 分割数组的最大值 给定一个非负整数数组 nums 和一个整数 m ,你需要将这个数组分成 m 个非空的连续子数组. 设计一个算法使得这 m 个子数组各自和的最大值最小. 示例 ...

  2. LeetCode 410——分割数组的最大值

    1. 题目 2. 解答 此题目为 今日头条 2018 AI Camp 5 月 26 日在线笔试编程题第二道--最小分割分数. class Solution {public:// 若分割数组的最大值为 ...

  3. leetcode 410. 分割数组的最大值(二分法)

    1. 题目描述 给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组.设计一个算法使得这 m 个子数组各自和的最大值最小.注意: 数组长度 n 满足以下条件:1 ≤ n ≤ ...

  4. 四边形不等式技巧——分割数组的最大值(画家问题)

    题目 给定一个整型数组arr,数组中的每个值都为正数,表示完成一幅画作需要的时间,再给定一个整数num,表示画匠的数量,每个画匠只能画连在一起的画作.所有的画家并行工作,请返回完成所有的画作需要的最少 ...

  5. 【数据结构与算法】之深入解析“分割数组的最大值”的求解思路与算法示例

    一.题目要求 给定一个非负整数数组 nums 和一个整数 m ,你需要将这个数组分成 m 个非空的连续子数组,设计一个算法使得这 m 个子数组各自和的最大值最小. 示例 1: 输入:nums = [7 ...

  6. 410. Split Array Largest Sum 分割数组的最大值

    给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组.设计一个算法使得这 m 个子数组各自和的最大值最小. 注意: 数组长度 n 满足以下条件: 1 ≤ n ≤ 1000 ...

  7. [Leetcode][第410题][JAVA][分割数组的最大值][动态规划][二分]

    [问题描述][中等] [解答思路] 1. 动态规划 第 1 步:设计状态 令 f[i][j] 表示将数组的前 i 个数分割为 j 段所能得到的最大连续子数组和的最小值. ( i ≥ j ) 第 2 步 ...

  8. LeetCode 410. 分割数组的最大值(极小极大化 二分查找 / DP)

    文章目录 1. 题目 2. 解题 2.1 二分查找 2.2 DP 1. 题目 给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组. 设计一个算法使得这 m 个子数组各自和 ...

  9. LeetCode 410. 分割数组的最大值

    题目描述: 给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组.设计一个算法使得这 m 个子数组各自和的最大值最小. 注意: 数组长度 n 满足以下条件: 1 ≤ n ≤ ...

最新文章

  1. 使用CV2和Keras OCR从图像中删除文本
  2. 985博士《深度学习》手推公式笔记开源PDF下载!
  3. Linux命令--pwd
  4. 5万字长文:Stream和Lambda表达式最佳实践-附PDF下载
  5. 如何利用navicat可视化软件添加与新建mysql数据库
  6. 计算机注销命令,Win7使用DOS命令实现定时自动关机,注销、重启的方法
  7. 网络商城html前端,商城 前端 html 页面 模板
  8. hibernate课程 初探单表映射1-2 ORM定义
  9. String变量作为参数传递的是String变量的副本
  10. IDEA卡顿解决方法
  11. 系统架构设计理论与原则、负载均衡及高可用系统设计速记
  12. ams1117封装尺寸
  13. win10商店游戏存档修改
  14. oracle自增序列
  15. Creator+微信小游戏:(3)微信openID获取(https、wss问题)
  16. 15个经典面试问题及回答思路,经典好文
  17. Android Studio项目编码设置为GBK或UTF-8  中文乱码 和 Eclipse项目编码设置
  18. 跨境电商最新资讯——扬帆际海
  19. VMware workstation批量创建虚拟机和自动化安装操作系统(二)
  20. Blender图解教程:手把手教你做马里奥问号箱 一 强迫症慎用版(附模型下载)

热门文章

  1. 程序员面试100题之五:二叉树两个结点的最低共同父结点
  2. 结队开发之NABCD
  3. mybatis 插件原理
  4. 「客户成功故事」OneAPM 助力网上办事大厅构建阳光、高效、安全的政务服务平台...
  5. Python第二天学习
  6. cannot find -lf2c
  7. vue -resource 文件提交提示process,或者拦截处理
  8. Cadence Allegro PCB 铺铜(覆铜)Shape呈格点状填充而不是完整全铜显示问题–Allegro技巧...
  9. usbserials
  10. WampServer的研究日记二