Leetcode 410. Split Array Largest Sum
来源:互联网 发布:乐其网络骗局 编辑:程序博客网 时间:2024/06/08 06:15
问题描述:
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 = 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.
二分搜索,问题特点,如果最大段数值越小,分布越均匀,则所分段数越多,如果最大段数值越大,则所分段数越少,二分查找,逼近最大段的数值。最大段的数值必然不小于数组最大值,也不小于sum/m,并且不大于sum。所以代码如下:
public int splitArray(int[] nums, int m) { int n=nums.length; long high=0; long low=0; for(int i=0;i<n;i++) { high+=nums[i]; if(low<nums[i]) low=nums[i]; } if(low<high/m) low=high/m; long ans=high; while(low<=high){ long sum=nums[0]; int cnt=1; long mid=low+(high-low)/2; boolean flg=true; for(int i=1;i<n;i++){ sum+=nums[i]; if(sum>mid){ cnt++; sum=nums[i]; } if(cnt>m){ flg=false; break; } } if(flg) { high=mid-1; ans=mid; } else{ low=mid+1; } } return (int)ans; }
参考链接:http://blog.csdn.net/u014688145/article/details/69525838
阅读全文
0 0
- 【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
- 图像数据集制作
- Xilinx FPGA设计代码风格 以后逐渐补充
- 【Algorithm】逆波兰表达式 Java实现
- 【转】JVM调优总结(十二)-参考资料
- 同时安装vs2013与vs2101无法打开包括文件:“SDKDDKVer.h
- Leetcode 410. Split Array Largest Sum
- 时光机穿梭
- 2.swap-two-nodes-in-linked-list(交换链表中的两个结点)
- Grandpa's Estate
- React 入门实例教程
- 机器学习之numpy和matplotlib学习(三)
- Windows下的Socket网络编程小实战
- 原子变量和CAS算法简单介绍
- 个人小作品之迷你音乐播放器(移动端)