lc1001
熟悉一下做题。。应该不难的题但现在真没做题的感觉。
原题
传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。
返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。
思路
船最小运载量:最重的那个货物;最大的运载量:所有货物之和。
直接遍历较慢,通过二分查找找到那个满足的最左边界值。
二分查找
int lo, hi, tar;
while (lo < hi) {
int mid = (lo + hi) / 2;
if (f(mid) == tar) {
break;
}
if (f(mid) > tar) {
hi = mid - 1;
} else {
lo = mid + 1;
}
}
//f()为正序单调函数,该题中为mid值是否能运载成功的判断函数
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。