牛牛有一个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; } }