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

LeetCode 2099: Find Subsequence of Length K With the Largest Sum

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

基本資料
#

難易度: easy 第一次嘗試:2022-11-22

  • 提交紀錄:Accepted → Runtime Error → Accepted

解題思路
#

子序列要保持原本的順序,但總和最大就是選最大的 k 個數。把 (值, index) 依值取最大的 k 個(排序或大小為 k 的 heap,Heap 模板一),再依 index 排序輸出。

我的嘗試
#

2022 年一次 AC,用 heap 彈掉最小的 n - k 個再按 index 排序。2025 年重寫時寫成 sort(lambda x: -x[1]),key 要用關鍵字參數(TypeError),補上 key= 就 AC 了。

正確解法
#

class Solution:
    def maxSubsequence(self, nums: List[int], k: int) -> List[int]:
        top = heapq.nlargest(k, range(len(nums)), key=lambda i: nums[i])
        return [nums[i] for i in sorted(top)]

複雜度
#

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

要特別避免的錯誤
#

  • 選完之後要按 index 排回原本的順序。
  • list.sort 的 key 要用關鍵字參數:sort(key=...)。

面試口說整理
#

總和最大就是選最大的 k 個數,但子序列要保持原本的順序,所以我用 nlargest 依值選出 k 個 index,再把 index 排序後輸出對應的值。時間 O(n log k)。

相關文章

LeetCode 2335: Minimum Amount of Time to Fill Cups
·1 分鐘
LeetCode Easy Array Greedy Sorting Heap-Priority-Queue
LeetCode 2335 解題筆記:答案是 max(最多的那種, ceil(總數 / 2));模擬的話每秒從最多的兩種各裝一杯
LeetCode 1464: Maximum Product of Two Elements in an Array
·1 分鐘
LeetCode Easy Array Sorting Heap-Priority-Queue
LeetCode 1464 解題筆記:值都是正數,取最大的兩個數 a、b,答案是 (a - 1)(b - 1)
LeetCode 2357: Make Array Zero by Subtracting Equal Amounts
·1 分鐘
LeetCode Easy Array Hash-Table Greedy Sorting
LeetCode 2357 解題筆記:每次操作會讓最小的正數那一群變成 0,所以次數就是不同的正數有幾種
LeetCode 1122: Relative Sort Array
·1 分鐘
LeetCode Easy Array Hash-Table Sorting Counting-Sort
LeetCode 1122 解題筆記:計數後先按照 arr2 的順序輸出,剩下的數由小到大接在後面
LeetCode 888: Fair Candy Swap
·1 分鐘
LeetCode Easy Array Hash-Table Binary-Search Sorting
LeetCode 888 解題筆記:交換 x 和 y 後總和相等,代表 y = x + (sumB - sumA) / 2;把 B 放進集合,逐一檢查 A 的 x
LeetCode 645: Set Mismatch
·1 分鐘
LeetCode Easy Array Hash-Table Bit-Manipulation Sorting
LeetCode 645 解題筆記:用總和算:missing = 1..n 的和 - set 的和,duplicate = 陣列總和 - set 的和