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

LeetCode 2294: Partition Array Such That Maximum Difference Is K

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

基本資料
#

難易度: medium 第一次嘗試:2025-09-03

  • 提交紀錄:Accepted(一次通過)

解題思路
#

每組只在乎最大值減最小值,跟順序無關,所以可以先排序。排序後從最小的數開始開一組,所有 <= start + k 的數都放進來;遇到第一個超過的,就開新的一組。

為什麼盡量往右延伸是對的:最小的數一定在某一組裡,那組最多只能裝到 start + k;多裝一些只會讓後面剩下的數更少,不會變差。這是 Greedy 模板一。

我的解法
#

class Solution:
    def partitionArray(self, nums: List[int], k: int) -> int:
        nums.sort()
        groups = 1
        start = nums[0]
        for x in nums[1:]:
            if x - start > k:
                groups += 1
                start = x
        return groups

複雜度
#

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

要特別避免的錯誤
#

  • 比較的是跟這組最小值的差,不是跟前一個數的差。

面試口說整理
#

子序列不在乎順序,所以我先排序。從最小的數開一組,往右把所有差距 <= k 的都放進去,超過就開新組。最小的數所在的那組本來就只能延伸到這裡,所以盡量延伸不會變差。時間 O(n log n)。

相關文章

LeetCode 2410: Maximum Matching of Players With Trainers
·1 分鐘
LeetCode Medium Two-Pointers Greedy Sorting Array
LeetCode 2410 解題筆記:兩邊都排序後,用同向雙指針讓最弱的球員配最小的、夠用的教練
LeetCode 3627: Maximum Median Sum of Subsequences of Size 3
·1 分鐘
LeetCode Medium Math Greedy Sorting Game-Theory Array
LeetCode 3627 解題筆記:排序後每次拿最大的兩個和最小的一個,中位數是第二大的;答案是從尾端往前每隔一個取,共 n / 3 個
LeetCode 3075: Maximize Happiness of Selected Children
·1 分鐘
LeetCode Medium Array Greedy Sorting
LeetCode 3075 解題筆記:由大到小選 k 個,第 i 個選的會被扣 i,扣到 0 為止
LeetCode 324: Wiggle Sort II
·1 分鐘
LeetCode Medium Array Divide-and-Conquer Greedy Sorting
LeetCode 324 解題筆記:排序後分成小的一半和大的一半,各自反轉後交錯放:小的放偶數位置、大的放奇數位置
LeetCode 435: Non-overlapping Intervals
·1 分鐘
LeetCode Medium Array Dynamic-Programming Greedy Sorting
LeetCode 435 解題筆記:最少刪幾個 = 總數減掉最多能保留幾個;按右端點排序,貪心保留結束最早的
LeetCode 853: Car Fleet
·1 分鐘
LeetCode Daily Medium Array Stack Greedy Simulation Sorting
使用堆疊方法解決車隊問題