LeetCode 410. Split Array Largest Sum
来源:互联网 发布:合同软件 编辑:程序博客网 时间:2024/06/06 00:53
题目描述:
Given an array which consists of non-negative integers and an integer m, you can split the array into m non-empty continuous subarrays. Write an algorithm to minimize the largest sum among these m 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 = 2
Output: 18
Explanation: 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.
算法分析:
这道题被放在动态规划的Tag下..然后用常规的动态规划方法思考了挺久没能想到解法…
参考了一下Discussion….
主要思路是将使最大和最小化的问题转化为了查找一个最小的最大和。
先确定这个值的范围,比较明显,是[ max(nums[i]), sum(nums[i]) ]。
之后用二分查找的方法在这个范围里查找符合条件的最小值。对于查找过程中的每个值k,判断能否将nums[]分为小于m个组,使得每组的和小于k。
详细代码:
class Solution {public: int splitArray(vector<int>& nums, int m) { int max = 0; unsigned long long sum = 0; for (int i = 0; i < nums.size(); i++) { sum += nums[i]; max = nums[i] > max ? nums[i] : max; } unsigned long long left = max, right = sum, mid; while (left < right) { mid = left + (right-left)/2; if (splitArray_k(nums, m, mid)) { right = mid; } else { left = mid+1; } } return left; }private: bool splitArray_k(vector<int>& nums, int m, unsigned long long k) { unsigned long long sum = 0; for (int i = 0; i < nums.size(); i++) { if (k >= sum + nums[i]) { sum += nums[i]; } else { if (m == 1) return false; sum = nums[i]; m--; } } return true; }};
提交结果:
27 / 27 test cases passed.
Status: Accepted
Runtime: 3 ms
Your runtime beats 41.58 % of cpp submissions.
- 【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)
- 【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
- Leetcode 410. Split Array Largest Sum
- LeetCode 410. Split Array Largest Sum
- leetcode 410. Split Array Largest Sum
- leetcode题解-410. Split Array Largest Sum
- IDEA用maven创建springMVC项目和配置(XML配置和Java配置)(修正版)
- 音频视频组件Audio DJ Studio for .NET更新至v10.0.0.0丨附下载
- Linux的opencv教程之加载一张图片
- Mybatis中oracle、mysql、db2、sql server的like模糊查询 及Oracle对时间得处理
- ThinkPHP中where()方法的使用
- LeetCode 410. Split Array Largest Sum
- C# Excel数据导入和导出简单方案
- 通过jdbc实现Oracle备份到Mysql
- OpenGL入门学习笔记02
- Python自动encoding
- windows上的tail指令使用
- Servlet 访问WEB资源的方式
- static
- Hadoop