PS/LeetCode
410. Split Array Largest Sum - Streak 17
조금씩 차근차근
2025. 9. 30. 08:55
이분탐색 문제이다.
너무 이분탐색이라 설명을 건너뛰고 주석으로 설명한다.
class Solution {
public int splitArray(int[] nums, int k) {
int lo = 0;
for(int i = 0; i<nums.length; i++) lo = Math.max(lo, nums[i]);
int hi = Integer.MAX_VALUE / 2;
while(lo<=hi){
int mid = (lo + hi)/2;
if(check(nums, k, mid)){
hi = mid - 1;
}else{
lo = mid + 1;
}
}
return lo;
}
private boolean check(int[] nums, int k, int upperbound){
int now = 0;
int nowSubArrCnt = 0;
for(int i = 0; i<nums.length; i++){
// 부분배열의 합이 upperbound보다 커지면 끊기
if(now + nums[i] > upperbound){
now = 0;
nowSubArrCnt++;
// 배열의 수가 k개보다 많아지면 실패
if(nowSubArrCnt == k) return false;
}
now += nums[i];
}
return true;
}
}