↓快轉到主要內容
  1. LeetCode/

LeetCode 3634: Minimum Removals to Balance Array

·1 分鐘· ·
LeetCode Medium Sliding-Window Sorting Binary-Search Array
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: medium 第一次嘗試:2026-01-10

  • 提交紀錄:Accepted ×3(2026-01-10、02-06、02-10 各寫一次)

解題思路
#

只看最大值和最小值,跟順序無關,先排序。

排序後,留下來的元素一定是連續的一段:如果留下了 a 和 c,中間的 b 介於兩者之間,留著也不會讓條件變差。

對每個當作最小值的 nums[left],往右找最遠的 right 使 nums[right] <= nums[left] * k。left 變大時門檻只會變大,right 不用回頭。刪掉的數量是 left + (n - right)。

我的解法
#

class Solution:
    def minRemoval(self, nums: List[int], k: int) -> int:
        nums.sort()
        n = len(nums)
        best = n
        right = 0
        for left in range(n):
            while right < n and nums[right] <= nums[left] * k:
                right += 1                         # [left, right) 都能留下
            best = min(best, left + (n - right))
        return best

複雜度
#

時間 O(n log n),空間 O(1)(不算排序)。

要特別避免的錯誤
#

  • 沒排序就找連續一段:題目是「刪掉任意元素」,不是刪連續的。

面試口說整理
#

條件只看最大和最小,所以先排序,排序後留下的一定是連續的一段。我枚舉留下的最小值 nums[left],用一個只往右走的指針找最遠能留到的位置,刪掉左邊和右邊剩下的,取最小值。時間由排序決定,O(n log n)。

相關文章

LeetCode 209: Minimum Size Subarray Sum
·1 分鐘
LeetCode Daily Medium Array Sliding-Window Two-Pointers Prefix-Sum Binary-Search
滑動視窗與雙指針,最小化子陣列長度(總和 ≥ target)。
LeetCode 1208: Get Equal Substrings Within Budget
·1 分鐘
LeetCode Medium Sliding-Window String Binary-Search Prefix-Sum
LeetCode 1208 解題筆記:每個位置的花費是 |s[i] - t[i]|,題目變成「總和 <= maxCost 的最長子陣列」
LeetCode 2024: Maximize the Confusion of an Exam
·1 分鐘
LeetCode Medium Sliding-Window String Binary-Search Prefix-Sum
LeetCode 2024 解題筆記:視窗合法的條件是 T 和 F 比較少的那個 <= k(把少的全部改掉);不合法就縮左邊
LeetCode 2958: Length of Longest Subarray With at Most K Frequency
·1 分鐘
LeetCode Medium Sliding-Window Hash-Table Array
LeetCode 2958 解題筆記:「求最長」的滑動視窗,剛加入的數字出現超過 k 次就縮左邊
LeetCode 2653: Sliding Subarray Beauty
·1 分鐘
LeetCode Medium Sliding-Window Hash-Table Array
LeetCode 2653 解題筆記:值域只有 -50 到 50,固定視窗用計數陣列維護,每個視窗從 -50 往上累加找第 x 小的負數
LeetCode 220: Contains Duplicate III
·2 分鐘
LeetCode Hard Sliding-Window Bucket-Sort Ordered-Set Sorting Array
LeetCode 220 解題筆記:桶大小設成 valueDiff + 1,同一個桶裡的兩個數一定符合;只要再看相鄰兩個桶。視窗只保留最近 indexDiff 個數,所以每個桶最多一個數