<p>Given an integer array <code>num</code> sorted in non-decreasing order.</p>

<p>You can perform the following operation any number of times:</p>

<ul>
	<li>Choose <strong>two</strong> indices, <code>i</code> and <code>j</code>, where <code>nums[i] &lt; nums[j]</code>.</li>
	<li>Then, remove the elements at indices <code>i</code> and <code>j</code> from <code>nums</code>. The remaining elements retain their original order, and the array is re-indexed.</li>
</ul>

<p>Return the <strong>minimum</strong> length of <code>nums</code> after applying the operation zero or more times.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<div class="example-block">
<p><strong>Input:</strong> <span class="example-io">nums = [1,2,3,4]</span></p>

<p><strong>Output:</strong> <span class="example-io">0</span></p>

<p><strong>Explanation:</strong></p>

<p><img src="https://assets.leetcode.com/uploads/2024/05/18/tcase1.gif" style="width: 160px; height: 70px;" /></p>
</div>

<p><strong class="example">Example 2:</strong></p>

<div class="example-block">
<p><strong>Input:</strong> <span class="example-io">nums = [1,1,2,2,3,3]</span></p>

<p><strong>Output:</strong> <span class="example-io">0</span></p>

<p><strong>Explanation:</strong></p>

<p><img src="https://assets.leetcode.com/uploads/2024/05/19/tcase2.gif" style="width: 240px; height: 70px;" /></p>
</div>

<p><strong class="example">Example 3:</strong></p>

<div class="example-block">
<p><strong>Input:</strong> <span class="example-io">nums = [1000000000,1000000000]</span></p>

<p><strong>Output:</strong> <span class="example-io">2</span></p>

<p><strong>Explanation:</strong></p>

<p>Since both numbers are equal, they cannot be removed.</p>
</div>

<p><strong class="example">Example 4:</strong></p>

<div class="example-block">
<p><strong>Input:</strong> <span class="example-io">nums = [2,3,4,4,4]</span></p>

<p><strong>Output:</strong> <span class="example-io">1</span></p>

<p><strong>Explanation:</strong></p>

<p><img src="https://assets.leetcode.com/uploads/2024/05/19/tcase3.gif" style="width: 210px; height: 70px;" /></p>
</div>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= nums.length &lt;= 10<sup>5</sup></code></li>
	<li><code>1 &lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
	<li><code>nums</code> is sorted in <strong>non-decreasing</strong> order.</li>
</ul>

import heapq
class Solution:
    def minLengthAfterRemovals(self, nums: List[int]) -> int:
        dct = {}
        for item in nums:
            if item not in dct.keys():
                dct[item] = 1
            else:
                dct[item] = dct[item]+1
        
        sorted_counts = []
        for key in dct.keys():
            heapq.heappush(sorted_counts, (-1*dct[key], key))


        while len(sorted_counts) > 1:
            last = heapq.heappop(sorted_counts)
            s_last = heapq.heappop(sorted_counts)
            if last[0] != -1: heapq.heappush(sorted_counts, (last[0]+1, last[1]) )
            if s_last[0] != -1: heapq.heappush(sorted_counts, (s_last[0]+1, s_last[1]) )
        if len(sorted_counts) == 0: return 0
        else: return -sorted_counts[0][0]
        # sorted_counts = sorted([[key, value] for key, value in dct.items()], key=lambda x: x[1])
        # while len(sorted_counts) > 1:
        #     last = sorted_counts[-1]
        #     s_last = sorted_counts[-2]
            
        #     if s_last[1]  == 1:
        #         sorted_counts.pop(-2)
        #     else:  sorted_counts[-2] = [sorted_counts[-2][0], sorted_counts[-2][1]-1]         
        #     if last[1] == 1:
        #         sorted_counts.pop()
        #     else: sorted_counts[-1] = [sorted_counts[-1][0], sorted_counts[-1][1]-1]
        #     print(sorted_counts)
        # return len(sorted_counts)


33800