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

LeetCode 3684: Maximize Sum of At Most K Distinct Elements

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

基本資料
#

難易度: easy 第一次嘗試:2026-01-29

  • 提交紀錄:Wrong Answer → Accepted

解題思路
#

數字都是正的,拿越多越大,所以盡量拿滿 k 個;要不重複,就去重之後由大到小取前 k 個。不同的值不到 k 個時就全拿。

我的嘗試
#

第一版照著範例寫死「前 3 大」,維護 biggest, second, third,完全沒用到 k。例如 nums = [5, 3]、k = 1:答案是 [5],這版回傳 [5, 3]。

改成排序後由大到小,跳過重複,拿到 k 個就停,就 AC 了。

正確解法
#

class Solution:
    def maxKDistinct(self, nums: List[int], k: int) -> List[int]:
        return sorted(set(nums), reverse=True)[:k]

複雜度
#

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

要特別避免的錯誤
#

  • 不要照範例的 k 寫死,參數要用上。

面試口說整理
#

全是正數,所以拿越多越好。我去重之後由大到小排序,取前 k 個。時間 O(n log n)。

相關文章

LeetCode 2357: Make Array Zero by Subtracting Equal Amounts
·1 分鐘
LeetCode Easy Array Hash-Table Greedy Sorting
LeetCode 2357 解題筆記:每次操作會讓最小的正數那一群變成 0,所以次數就是不同的正數有幾種
LeetCode 3545: Minimum Deletions for At Most K Distinct Characters
·1 分鐘
LeetCode Easy Greedy Hash-Table String Sorting Counting
LeetCode 3545 解題筆記:要減少種類就得整種刪掉,從出現次數最少的開始刪
LeetCode 976: Largest Perimeter Triangle
·1 分鐘
LeetCode Easy Math Greedy Sorting Geometry Array
LeetCode 976 解題筆記:排序後,從最大的開始看連續的三條邊,a + b > c 第一次成立就是最大周長
LeetCode 3606: Coupon Code Validator
·1 分鐘
LeetCode Easy Hash-Table String Sorting
LeetCode 3606 解題筆記:先過濾合法的優惠券,再用(類別順序, code)排序;字元範圍要包含 z、Z、9
LeetCode 3487: Maximum Unique Subarray Sum After Deletion
·1 分鐘
LeetCode Easy Greedy Hash-Table Array
LeetCode 3487 解題筆記:可以任意刪除,所以等於挑不重複的值;非負的全拿,全是負數時只拿最大的一個
LeetCode 3074: Apple Redistribution into Boxes
·1 分鐘
LeetCode Easy Array Greedy Sorting
LeetCode 3074 解題筆記:箱子可以隨便分,所以從容量最大的箱子開始拿,總容量夠裝所有蘋果就停