分割数组的最大值—leetcode410
给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。
注意:
数组长度 n 满足以下条件:
- 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相关推荐
- 7、leetcode410 分割数组的最大值
leetcode410 分割数组的最大值 给定一个非负整数数组 nums 和一个整数 m ,你需要将这个数组分成 m 个非空的连续子数组. 设计一个算法使得这 m 个子数组各自和的最大值最小. 示例 ...
- LeetCode 410——分割数组的最大值
1. 题目 2. 解答 此题目为 今日头条 2018 AI Camp 5 月 26 日在线笔试编程题第二道--最小分割分数. class Solution {public:// 若分割数组的最大值为 ...
- leetcode 410. 分割数组的最大值(二分法)
1. 题目描述 给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组.设计一个算法使得这 m 个子数组各自和的最大值最小.注意: 数组长度 n 满足以下条件:1 ≤ n ≤ ...
- 四边形不等式技巧——分割数组的最大值(画家问题)
题目 给定一个整型数组arr,数组中的每个值都为正数,表示完成一幅画作需要的时间,再给定一个整数num,表示画匠的数量,每个画匠只能画连在一起的画作.所有的画家并行工作,请返回完成所有的画作需要的最少 ...
- 【数据结构与算法】之深入解析“分割数组的最大值”的求解思路与算法示例
一.题目要求 给定一个非负整数数组 nums 和一个整数 m ,你需要将这个数组分成 m 个非空的连续子数组,设计一个算法使得这 m 个子数组各自和的最大值最小. 示例 1: 输入:nums = [7 ...
- 410. Split Array Largest Sum 分割数组的最大值
给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组.设计一个算法使得这 m 个子数组各自和的最大值最小. 注意: 数组长度 n 满足以下条件: 1 ≤ n ≤ 1000 ...
- [Leetcode][第410题][JAVA][分割数组的最大值][动态规划][二分]
[问题描述][中等] [解答思路] 1. 动态规划 第 1 步:设计状态 令 f[i][j] 表示将数组的前 i 个数分割为 j 段所能得到的最大连续子数组和的最小值. ( i ≥ j ) 第 2 步 ...
- LeetCode 410. 分割数组的最大值(极小极大化 二分查找 / DP)
文章目录 1. 题目 2. 解题 2.1 二分查找 2.2 DP 1. 题目 给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组. 设计一个算法使得这 m 个子数组各自和 ...
- LeetCode 410. 分割数组的最大值
题目描述: 给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组.设计一个算法使得这 m 个子数组各自和的最大值最小. 注意: 数组长度 n 满足以下条件: 1 ≤ n ≤ ...
最新文章
- 使用CV2和Keras OCR从图像中删除文本
- 985博士《深度学习》手推公式笔记开源PDF下载!
- Linux命令--pwd
- 5万字长文:Stream和Lambda表达式最佳实践-附PDF下载
- 如何利用navicat可视化软件添加与新建mysql数据库
- 计算机注销命令,Win7使用DOS命令实现定时自动关机,注销、重启的方法
- 网络商城html前端,商城 前端 html 页面 模板
- hibernate课程 初探单表映射1-2 ORM定义
- String变量作为参数传递的是String变量的副本
- IDEA卡顿解决方法
- 系统架构设计理论与原则、负载均衡及高可用系统设计速记
- ams1117封装尺寸
- win10商店游戏存档修改
- oracle自增序列
- Creator+微信小游戏:(3)微信openID获取(https、wss问题)
- 15个经典面试问题及回答思路,经典好文
- Android Studio项目编码设置为GBK或UTF-8 中文乱码 和 Eclipse项目编码设置
- 跨境电商最新资讯——扬帆际海
- VMware workstation批量创建虚拟机和自动化安装操作系统(二)
- Blender图解教程:手把手教你做马里奥问号箱 一 强迫症慎用版(附模型下载)
热门文章
- 程序员面试100题之五:二叉树两个结点的最低共同父结点
- 结队开发之NABCD
- mybatis 插件原理
- 「客户成功故事」OneAPM 助力网上办事大厅构建阳光、高效、安全的政务服务平台...
- Python第二天学习
- cannot find -lf2c
- vue -resource 文件提交提示process,或者拦截处理
- Cadence Allegro PCB 铺铜(覆铜)Shape呈格点状填充而不是完整全铜显示问题–Allegro技巧...
- usbserials
- WampServer的研究日记二