Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
50 lines (46 loc) · 1.33 KB

File metadata and controls

50 lines (46 loc) · 1.33 KB
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*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:
*Given m satisfies the following constraint: 1 ≤ m ≤ length(nums) ≤ 14,000.
*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.
*/
class Solution {
public:
bool canSplit(vector<int>& nums,int cut,long long max){
int accumulate=0;
for(auto num:nums){
if((accumulate+num)<=max)
accumulate+=num;
else{
cut--;
accumulate=num;
if(cut<0) return false;
}
}
return true;
}
int splitArray(vector<int>& nums, int m) {
long long right=0,left=0;
for(vector<int>::iterator it=nums.begin();it!=nums.end();it++){
left=max(left,(long long)*it);
right+=*it;
}
while(left<right){
long long mid=(left+right)/2;
if(canSplit(nums,m-1,mid)) right=mid;
else left=mid+1;
}
return left;
}
};
Morty Proxy This is a proxified and sanitized view of the page, visit original site.