Solution 1

  • TimeO(n log n)
  • SpaceO(n)

where, n is the length of nums
DID NOT GO THROUGH THE SOLUTION YET!

Python · 2026-01-23
from heapq import heappush, heappop
class Solution:
    '''
    Time Complexity: O(n log n)
    Space Complexity: O(n)
    where, n is the length of nums
    DID NOT GO THROUGH THE SOLUTION YET!
    '''
    def minimumPairRemoval(self, nums: List[int]) -> int:
        n = len(nums)
        if n <= 1:
            return 0

        left = [-1] + list(range(n - 1))
        right = list(range(1, n)) + [-1]
        alive = [True] * n

        bad = 0
        for i in range(n - 1):
            if nums[i] > nums[i + 1]:
                bad += 1

        if bad == 0:
            return 0

        heap = []
        for i in range(n - 1):
            heappush(heap, (nums[i] + nums[i + 1], i))

        ops = 0

        while bad > 0:
            s, i = heappop(heap)

            if not alive[i]:
                continue

            j = right[i]
            if j == -1 or not alive[j]:
                continue

            if nums[i] + nums[j] != s:
                continue

            li = left[i]
            rj = right[j]

            if li != -1 and nums[li] > nums[i]:
                bad -= 1
            if nums[i] > nums[j]:
                bad -= 1
            if rj != -1 and nums[j] > nums[rj]:
                bad -= 1

            nums[i] += nums[j]
            alive[j] = False

            right[i] = rj
            if rj != -1:
                left[rj] = i

            if li != -1 and nums[li] > nums[i]:
                bad += 1
            if rj != -1 and nums[i] > nums[rj]:
                bad += 1

            if li != -1:
                heappush(heap, (nums[li] + nums[i], li))
            if rj != -1:
                heappush(heap, (nums[i] + nums[rj], i))

            ops += 1

        return ops
Leet Code/python.py · L4494–4568