Untitled
unknown
plain_text
a year ago
1.1 kB
9
Indexable
def countMaximumDays(lend, payback):
from bisect import bisect_left
n = len(lend)
# Create a list of lenders with their lend amount, index, and payback
lenders = sorted([(lend[i], i, payback[i]) for i in range(n)])
day = 0
prev_payback = 0 # No payback on the first day
while True:
if day == 0:
# On the first day, pick the lender with the smallest lend amount
lend_i, idx, payback_i = lenders.pop(0)
prev_payback = payback_i
day += 1
else:
# Need to find a lender with lend >= prev_payback
# Extract the list of lend amounts
lend_amounts = [l[0] for l in lenders]
# Find the leftmost lender with lend >= prev_payback
left = bisect_left(lend_amounts, prev_payback)
if left == len(lenders):
break # No lender can satisfy the payback requirement
lend_i, idx, payback_i = lenders.pop(left)
prev_payback = payback_i
day += 1
if not lenders:
break # No more lenders to borrow from
return dayEditor is loading...
Leave a Comment