[ツリーコード]101-javascript
📌 質問する
https://leetcode.com/problems/capacity-to-ship-packages-within-d-days
📌 に答える
/**
* @param {number[]} weights
* @param {number} days
* @return {number}
*/
var shipWithinDays = function (arr, k) {
let sum = arr.reduce((a, b) => a + b);
let left = 1;
let right = sum;
let ans = Infinity;
while (left <= right) {
let mid = parseInt((left + right) / 2);
let cnt = 1;
let cur = 0;
for (let i = 0; i < arr.length; i++) {
if (arr[i] > mid) {
cnt = Infinity;
break;
}
if (cur + arr[i] <= mid) {
cur += arr[i];
} else {
cnt++;
cur = arr[i];
}
}
if (cnt <= k) {
if (mid < ans) {
ans = mid;
}
right = mid - 1;
} else {
left = mid + 1;
}
}
return ans;
};
✔アルゴリズム:二分探索✔arrは箱ごとの重さの配列です.これは、コンベアのすべての包装がk日以内に出荷できるように、船舶の最小重量容量を返却しなければならない問題である.
✔典型的な二分探索問題は、左に重量の和を設定して開始します.
✔左側と右側の中央をmidに設定しarr[0]からナビゲートを開始します.
10004 midまで加算と超過を続け、cntは1増加し、curは現在のインデックスの重量に更新されます.
✔すべての探索が終了した場合、cntをkと比較し、k以下であればansと比較し、小さい場合はansを更新する.
✔cntがk以下の場合、右が減少し、cntがk以上の場合、左が増加します.
❗arr[i]がmidより大きい場合、現在のmidにカプセル化できないため、cntをinfinityに変更して中断する必要がある.
✔難易度:回復コード基準medium
Reference
この問題について([ツリーコード]101-javascript), 我々は、より多くの情報をここで見つけました https://velog.io/@ywc8851/리트코드-1011-javascriptテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol