Finish problem 1011-capacity-to-ship-packages-within-d-days
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
def days_needed(weights: list[int], s: int) -> int:
|
||||
days = 1
|
||||
capacity = s
|
||||
for weight in weights:
|
||||
if capacity - weight >= 0:
|
||||
capacity -= weight
|
||||
else:
|
||||
capacity = s - weight
|
||||
days += 1
|
||||
return days
|
||||
|
||||
|
||||
class Solution:
|
||||
def shipWithinDays(self, weights: list[int], days: int) -> int:
|
||||
lo, hi = max(weights), sum(weights)
|
||||
while lo < hi:
|
||||
s = (lo + hi) // 2
|
||||
if days_needed(weights, s) > days:
|
||||
lo = s + 1
|
||||
else:
|
||||
hi = s
|
||||
|
||||
return lo
|
||||
@@ -0,0 +1,19 @@
|
||||
import pytest
|
||||
from solution import Solution
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"weights,days,expected",
|
||||
[
|
||||
([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 5, 15),
|
||||
([3, 2, 2, 4, 1, 4], 3, 6),
|
||||
([1, 2, 3, 1, 1], 4, 3),
|
||||
([1], 1, 1),
|
||||
([5, 5, 5, 5], 4, 5),
|
||||
([5, 5, 5, 5], 1, 20),
|
||||
([10, 50, 100, 100, 50, 10], 1, 320),
|
||||
([10, 50, 100, 100, 50, 10], 6, 100),
|
||||
],
|
||||
)
|
||||
def test_ship_within_days(weights, days, expected):
|
||||
assert Solution().shipWithinDays(weights, days) == expected
|
||||
Reference in New Issue
Block a user