| 123456789101112131415161718192021222324252627282930313233343536373839404142 | 
							- func splitArray(nums []int, m int) int {
 
- 	if len(nums) == 0 {
 
- 		return 0
 
- 	}
 
- 	l, r := nums[0], 0 // max, sum
 
- 	for _, i := range nums {
 
- 		l = maxInt(l, i)
 
- 		r += i
 
- 	}
 
- 	for l <= r {
 
- 		mid := l + (r-l)/2
 
- 		if isValid(nums, m, mid) { // res <= mid, mid is big enough
 
- 			r = mid - 1
 
- 		} else { // mid < res
 
- 			l = mid + 1
 
- 		}
 
- 	}
 
- 	return l
 
- }
 
- func isValid(nums []int, m, max int) bool {
 
- 	cnt, sum := 1, 0
 
- 	for _, i := range nums {
 
- 		if max < sum+i {
 
- 			sum = i
 
- 			cnt++
 
- 			if m < cnt {
 
- 				return false
 
- 			}
 
- 		} else {
 
- 			sum += i
 
- 		}
 
- 	}
 
- 	return true
 
- }
 
- func maxInt(x, y int) int {
 
- 	if x < y {
 
- 		return y
 
- 	}
 
- 	return x
 
- }
 
 
  |