Leetcode: 2163. Minimum Difference in Sums After Removal of Elements

Problem Statement

from heapq import heappush, heappop
from typing import List


class Solution:
    def minimumDifference(self, nums: List[int]) -> int:
        N = len(nums)
        M = N // 3

        left = []
        left_sum = 0
        dpl = [float("inf")] * N
        for i in range(2 * M):
            left_sum += nums[i]
            heappush(left, -nums[i])
            if len(left) > M:
                left_sum -= -heappop(left)
            if i >= M - 1:
                dpl[i] = left_sum

        right = []
        right_sum = 0
        ans = float("inf")
        for i in range(N - 1, M - 1, -1):
            right_sum += nums[i]
            heappush(right, nums[i])
            if len(right) > M:
                right_sum -= heappop(right)
            if N - i >= M - 1:
                ans = min(ans, dpl[i - 1] - right_sum)

        return ans