410. Split Array Largest Sum
来源:互联网 发布:淘宝联盟提现钱没到账 编辑:程序博客网 时间:2024/05/17 03:45
Given an array which consists of non-negative integers and an integer m, you can split the array intom non-empty continuous subarrays. Write an algorithm to minimize the largest sum among thesem subarrays.
Note:
If n is the length of array, assume the following constraints are satisfied:
- 1 ≤ n ≤ 1000
- 1 ≤ m ≤ min(50, n)
Examples:
Input:nums = [7,2,5,10,8]m = 2Output:18Explanation:There are four ways to split nums into two subarrays.The best way is to split it into [7,2,5] and [10,8],where the largest sum among the two subarrays is only 18.
Subscribe to see which companies asked this question.
将给定的序列分成m个子序列,使得各个序列的总和的最大值最小,求出这个最小的最大值。看了discuss才知道怎样用二分法做,答案一定是在Max(序列的最大值)和sum(序列总和)之间,在这个范围内进行二分搜索。对于当前的值d,如果序列能分成m个和小于等于d的序列,则表示当前值是“有效的”,可以进一步减少来寻找最终答案;如果不能,即分成多于m个和小于等于d的序列,则当前值比答案小,增大之寻找最终答案。最后缩到一个值,判断这个值是否“有效”,“有效”的话答案是这个值,否则是这个值加1.
代码:
class Solution {public:int splitArray(vector<int>& nums, int m) {int sum = 0, Max = 0;for(auto num:nums){sum += num;Max = max(Max, num);}int l = Max, r = sum;while(l < r){int mid = l + (r - l) / 2;bool b = isvalid(nums, m, mid);if(b){r = mid - 1;}else{l = mid + 1;}}return isvalid(nums, m, l) ? l : l+1;}private:bool isvalid(vector<int>& nums, int m, int d){int sum = 0;for(auto num:nums){if(sum + num > d){--m;sum = 0;}if(m == 0) return false;sum += num;}return true;}};
0 0
- 410. Split Array Largest Sum
- 410. Split Array Largest Sum
- 410. Split Array Largest Sum
- 410. Split Array Largest Sum
- 410. Split Array Largest Sum
- 410. Split Array Largest Sum
- 410. Split Array Largest Sum
- 410. Split Array Largest Sum
- Split Array Largest Sum
- Split Array Largest Sum
- Split Array Largest Sum
- 【Leetcode】410. Split Array Largest Sum
- leetcode 410.Split Array Largest Sum
- leetcode-410. Split Array Largest Sum
- 【LeetCode】410. Split Array Largest Sum
- Leetcode 410. Split Array Largest Sum
- [LeetCode]410. Split Array Largest Sum
- leetcode 410.Split Array Largest Sum(Hard)
- Kafka之sync、async以及oneway
- eclipse的代码不全功能
- CentOS下使用yum安装Mysql,以及Mysql主从复制的配置
- 两字符串比较函数
- TensorFlow下MNIST数据集下载脚本input_data.py
- 410. Split Array Largest Sum
- 如何创建一个最简单的Windows桌面应用程序 (C++)
- <机器学习>(周志华)读书笔记 -- 第一章 绪论
- windows下安装python的numpy模块
- 性能测试知多少---了解前端性能
- C/C++信息隐写术(四)之大程序藏入BMP文件
- U-Boot 中 PING 命令处理流程
- 递归算法-->整数划分
- 【POJ1159】【DP】17.2.6 T1 强迫症 题解