牛牛有一个n个数字的序列
,现在牛牛想把这个序列分成k段连续段,牛牛想知道分出来的k个连续段的段内数字和的最小值最大可以是多少?
4,2,[1,2,1,5]
4
有3种分法[1],[2,1,5],数字和分别为1,8,最小值为1[1,2][1,5],数字和分别为3,6,最小值为3[1,2,1],[5]数字和分别为4,5,最小值为4则最小值的最大值为4
第一个参数整数n代表序列数字个数
第二个参数整数k代表分出的段数
第三个参数a 包含n个元素代表n个数字
import java.util.*;
public class Solution {
public int solve (int n, int k, int[] a) {
if(a.length == 0){
return 0;
}
int sum = 0;
for(int i = 0; i < n; i ++){
sum = sum + a[i];
}
if(k == 1){
return sum;
}
int low = 0;
int high = sum/k;
while(low <= high){
int mid = low + (high - low) / 2;
if(check(a, k, mid)){
low = mid + 1;
}else{
high = mid - 1;
}
}
return (low+high)/2;
}
public boolean check(int a[], int k, int min_max_sum){
int count = 0;
int sum = 0;
for(int j = 0; j < a.length; j++){
sum += a[j];
if(sum >= min_max_sum){
sum = 0;
count += 1;
if(count >= k){
return true;
}
}
}
return false;
}
}