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

LeetCode 3572: Maximize Y‑Sum by Picking a Triplet of Distinct X‑Values

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

基本資料
#

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

  • 提交紀錄:Wrong Answer → Accepted

解題思路
#

要挑三個 index,它們的 x 互不相同,讓 y 的和最大。

貪心:同一個 x 最多只能挑一個,那當然挑 y 最大的。所以:

  1. 對每個 x 值,只留最大的 y。
  2. 不同的 x 少於三種,回傳 -1。
  3. 否則取最大的三個 y 相加。

我的嘗試:排序後取錯邊
#

max_number_of_groups.sort()
return sum(max_number_of_groups[:3])     # 升冪排序,[:3] 是最小的三個

升冪排序後前三個是最小的,要取 [-3:]。

正確解法
#

import heapq

class Solution:
    def maxSumDistinctTriplet(self, x: List[int], y: List[int]) -> int:
        best = {}
        for xi, yi in zip(x, y):
            if yi > best.get(xi, 0):
                best[xi] = yi
        if len(best) < 3:
            return -1
        return sum(heapq.nlargest(3, best.values()))

heapq.nlargest(3, ...) 是 O(m),比排序整個 list 的 O(m log m) 快一點,也比較不會取錯邊。

複雜度
#

時間 O(n),空間 O(n)。

要特別避免的錯誤
#

  • 升冪排序後取 [:3]。
  • 同一個 x 挑了兩次。

面試口說整理
#

同一個 x 只能選一次,所以每個 x 只留下最大的 y。如果不同的 x 少於三種就回傳 -1,否則取最大的三個 y 相加。用 dict 掃一次,再用 nlargest 取前三,時間 O(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 164: Maximum Gap
·1 分鐘
LeetCode Medium Bucket-Sort Radix-Sort Sorting Array
LeetCode 164 解題筆記:最大間距至少是平均間距,桶子寬度不超過它時,最大差一定在相鄰的非空桶子之間;每個桶子只記最小和最大值,O(n)
LeetCode 3508: Implement Router
·2 分鐘
LeetCode Medium Design Binary-Search Queue Hash-Map
LeetCode 3508 解題筆記:queue 管 FIFO、set 判重複、每個目的地一個遞增的時間陣列,查詢用 bisect
LeetCode 3545: Minimum Deletions for At Most K Distinct Characters
·1 分鐘
LeetCode Easy Greedy Hash-Table String Sorting Counting
LeetCode 3545 解題筆記:要減少種類就得整種刪掉,從出現次數最少的開始刪