LeetCode 1011. D일 이내에 패키지를 배송할 수 있는 용량(자바스크립트 솔루션)
5091 단어 algorithmsjavascript
설명:
컨베이어 벨트에는 D일 이내에 한 포트에서 다른 포트로 배송되어야 하는 패키지가 있습니다.
컨베이어 벨트의 i번째 패키지는 weight[i]의 무게를 가집니다. 매일 우리는 컨베이어 벨트에 포장물을 싣습니다(무게 순서대로). 우리는 선박의 최대 중량 용량보다 더 많은 중량을 적재할 수 없습니다.
컨베이어 벨트의 모든 패키지가 D일 이내에 배송되도록 하는 선박의 최소 중량 용량을 반환합니다.
해결책:
시간 복잡도 : O(n^2log(n))
공간 복잡도: O(1)
// Binary search approach
var shipWithinDays = function(weights, D) {
function getDays(capacity) {
let days = 1, total = 0;
// See how many days it will take to unload all the weights given the current capacity
for(let n of weights) {
total += n;
// Increase days only when we will exceed the capacity
if(total > capacity) {
total = n;
days++;
}
}
return days;
}
// Start is the minimum capacity of one day which is the max of all the weights
// End is the max capacity we could load on one day which is the sum of all the weights
let start = Math.max(...weights),
end = weights.reduce((acc, cur) => acc + cur, 0);
// The min cacpaity needed is between start and finish
while(start < end) {
const mid = Math.floor((end+start)/2);
// See how many days it would take to unload all the weigths given mid as the current capacity
const days = getDays(mid);
// If capacity at mid took more than D days to load, then we can add more weigth on the ships each day which means we need to increase the daily capacity
if(days > D) start = mid+1;
// mid might be our answer so we cannot set end to mid-1
else end = mid;
}
return end;
};
Reference
이 문제에 관하여(LeetCode 1011. D일 이내에 패키지를 배송할 수 있는 용량(자바스크립트 솔루션)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/cod3pineapple/leetcode-1011-capacity-to-ship-packages-within-d-days-javascript-solution-2i9h텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)