Leetcode 853 Solution

This article provides solution to leetcode question 853 (most-profit-assigning-work)

https://leetcode.com/problems/most-profit-assigning-work

Solution

class Solution:
    def maxProfitAssignment(self, difficulty: List[int], profit: List[int], worker: List[int]) -> int:
        a = []
        for d, p in sorted(zip(difficulty, profit)):
            if not a or a[-1][1] < p:
                a.append((d, p))

        ans = 0
        for w in worker:
            l = 0
            r = len(a) - 1
            while l < r:
                m = (l + r + 1) // 2
                if a[m][0] > w:
                    r = m - 1
                else:
                    l = m
            ans += a[l][1] if a[l][0] <= w else 0

        return ans