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

LeetCode 2410: Maximum Matching of Players With Trainers

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

基本資料
#

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

  • 提交紀錄:Accepted(一次通過)

解題思路
#

貪心:能力最弱的球員,應該配「剛好夠用」的最小教練。把大的教練留給更強的球員,不會讓配對數變少。

把 players 和 trainers 都排序,兩個指針同向走:

  • trainers[j] < players[i]:這個教練連目前最弱的球員都帶不動,之後的球員更強,也帶不動,跳過這個教練。
  • 否則配成一對,兩個指針都前進。

最後配了幾個球員就是答案。

我的解法
#

class Solution:
    def matchPlayersAndTrainers(self, players: List[int], trainers: List[int]) -> int:
        players.sort()
        trainers.sort()
        i = j = 0
        while i < len(players) and j < len(trainers):
            if trainers[j] >= players[i]:
                i += 1                     # 配成一對
            j += 1                         # 這個教練用掉或跳過
        return i

複雜度
#

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

要特別避免的錯誤
#

  • 讓球員去配「最大的」教練:會浪費掉能帶更強球員的教練。

面試口說整理
#

我把兩邊都排序,讓最弱的球員配最小的、能力夠的教練。教練太弱就跳過,因為後面的球員只會更強;夠的話就配對,兩個指針都往前。每個元素只看一次,時間主要是排序的 O(n log n)。

相關文章

LeetCode 3075: Maximize Happiness of Selected Children
·1 分鐘
LeetCode Medium Array Greedy Sorting
LeetCode 3075 解題筆記:由大到小選 k 個,第 i 個選的會被扣 i,扣到 0 為止
LeetCode 611: Valid Triangle Number
·1 分鐘
LeetCode Medium Array Two-Pointers Binary-Search Greedy
LeetCode 611 解題筆記:排序後固定最長邊 k,左右指針找兩短邊:和夠大時中間的都可以,一次加 j - i 個
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 75: Sort Colors
·1 分鐘
LeetCode Medium Array Two-Pointers Sorting Quicksort
LeetCode 75 解題筆記:荷蘭國旗:low 左邊都是 0、high 右邊都是 2;遇到 2 換到 high 之後不要前進,換過來的數還沒檢查
LeetCode 11: Container With Most Water
·1 分鐘
LeetCode Medium Array Two-Pointers Greedy
LeetCode 11 解題筆記:左右指針從兩端開始,每次移動比較矮的那一邊;移動高的那邊只會讓寬度變小、高度不會變高