LeetCode 🟡 1673. Find the Most Competitive Subsequence
🔗 🟡 1673. Find the Most Competitive Subsequence 1802
tags: Weekly Contest 217
貪心(Greedy)
單調棧(Monotonic Stack)
字典序(Lexicographical Order)
題意
給定一個整數陣列 和一個正整數 ,返回 中大小為 ,且 字典序(lexicographical order) 最小的子序列。
如果在子序列 和 (長度相同)的第一個不同位置, 的數字小於 的相應數字,則 的字典序更小。例如, ,因為它們的第一個不同位置是最後一個數字, 小於 。
思路:貪心(Greedy) + 單調棧(Monotonic Stack)
基於 貪心(Greedy) 思路,為求得字典序最小的子序列,我們需使子序列中前面的數字盡可能小,因此可以使用 單調棧(Monotonic Stack) ,將數字依序加入 Stack 中,並在加入時檢查 頂端是否有比當前數字更大的數字,若有,則將其移除,直到棧中的數字個數為 為止。
在移除 頂端的元素時,需注意最後的答案長度是否足夠,而當枚舉到第 個數字時,剩餘未枚舉的數字個數為 ,若剩餘的數字不足以使得 Stack 中的數字個數為 ,即 ,則不應該再移除 頂端的元素。
此外,再加入數字時可以檢查 中的數字個數是否已經達到 ,若已達到則不需再加入數字;也可以繼續加入,但最後返回時只取前 個數字。
複雜度分析
- 時間複雜度:,每個數字都會被枚舉一次,且最多只有各一次的加入和移除操作。
- 空間複雜度:, 最多只會存放 個數字。
1 | class Solution: |
1 | class Solution { |
類題:最小字典序
- 🟡 316. Remove Duplicate Letters
- 🟡 402. Remove K Digits
- 🟡 1673. Find the Most Competitive Subsequence 1802
- 🔴 321. Create Maximum Number
- 🔴 2030. Smallest K-Length Subsequence With Occurrences of a Letter 2562
題單來自:@灵茶山艾府
寫在最後
Cover photo is generated by @ゴリラの素材屋さん, thanks for their work!
很典型的單調棧題目。
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 十六個天亮!
評論
WalineGiscus