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

LeetCode 3627: Maximum Median Sum of Subsequences of Size 3

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

基本資料
#

難易度: medium 第一次嘗試:2025-07-27

  • 提交紀錄:Time Limit Exceeded → Accepted

解題思路
#

每次選三個數,得到的是中位數。最大的數永遠不可能是中位數,所以:

  • 每一組都拿目前最大的兩個,再配目前最小的一個當墊底。中位數是那兩個大的裡面比較小的。
  • 最小的 n / 3 個數全部拿去墊底。

排序後,答案是 nums[-2] + nums[-4] + ... ,從尾端往前每隔一個取,取 n / 3 個。

我的嘗試
#

第一版直接模擬:排序後每次 pop() 兩次、pop(0) 一次。pop(0) 要把整個陣列往前移,是 O(n),總共 O(n^2),TLE。改成直接算 index 就 AC 了。

正確解法
#

class Solution:
    def maximumMedianSum(self, nums: List[int]) -> int:
        nums.sort()
        n = len(nums)
        return sum(nums[n - 2 - 2 * i] for i in range(n // 3))

複雜度
#

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

要特別避免的錯誤
#

  • list.pop(0) 是 O(n)。
  • 最大的數只能當最大值,不能當中位數,所以每組要「浪費」一個大的。

面試口說整理
#

最大的數不可能是中位數,所以每一組拿目前最大的兩個和最小的一個,中位數是第二大的。排序後答案就是從尾端往前每隔一個取,取 n / 3 個。時間 O(n log n)。

相關文章

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 2410: Maximum Matching of Players With Trainers
·1 分鐘
LeetCode Medium Two-Pointers Greedy Sorting Array
LeetCode 2410 解題筆記:兩邊都排序後,用同向雙指針讓最弱的球員配最小的、夠用的教練
LeetCode 164: Maximum Gap
·1 分鐘
LeetCode Medium Bucket-Sort Radix-Sort Sorting Array
LeetCode 164 解題筆記:最大間距至少是平均間距,桶子寬度不超過它時,最大差一定在相鄰的非空桶子之間;每個桶子只記最小和最大值,O(n)
LeetCode 1353: Maximum Number of Events That Can Be Attended
·1 分鐘
LeetCode Medium Heap Greedy Sorting
LeetCode 1353 解題筆記:每天參加「最早結束」的活動,用 min-heap 存結束日