題目連結(jié):
題目意譯:
你被給定一個(gè)索引值從 0 開始的整數(shù)陣列 players,其中 players[i] 代表著第 i 位玩家的能力值。你同時(shí)也被給定一個(gè)索引值從 0 開始的整數(shù)陣列 trainers,其中 trainers[j] 代表著第 j 位訓(xùn)練家的訓(xùn)練能力。
第 i 位玩家可以與第 j 位訓(xùn)練家相配,則代表玩家的能力值小於等於訓(xùn)練家的訓(xùn)練能力。此外,第 i 位玩家最多只能配到一位訓(xùn)練家,而第 j 位訓(xùn)練家最多只能配到一位玩家。
回傳可以滿足以上條件的最多可能的玩家與訓(xùn)練家之配對(duì)數(shù)。
限制:
1 ≦ players.length, trainers.length ≦ 10 ^ 5
1 ≦ players[i], trainers[j] ≦ 10 ^ 9
範(fàn)例測(cè)資:
範(fàn)例 1:
輸入: players = [4,7,9], trainers = [8,2,5,8]
輸出: 2
解釋:
其中一個(gè)可以形成兩個(gè)配對(duì)的方式為以下:
- players[0] 可以與 trainers[0] 配對(duì),因?yàn)?4 ≦ 8。
- players[1] 可以與 trainers[3] 配對(duì),因?yàn)?7 ≦ 8。
可以證明 2 是最多可形成的配對(duì)數(shù)。
範(fàn)例 2:
輸入: players = [1,1,1], trainers = [10]
輸出: 1
解釋:
該訓(xùn)練家可以與 3 位玩家中任一位配對(duì)。
每個(gè)玩家最多只能與一位訓(xùn)練家配對(duì),所以最大之答案為 1。
(原意如此,而正確的邏輯應(yīng)為「一位訓(xùn)練家最多只能與一位玩家配對(duì)」。)
解題思維:
把玩家和訓(xùn)練家各自按照能力值由小排到大,然後盡量用能力小的玩家去配能力小(但符合題目條件)的訓(xùn)練家。
可以看到當(dāng)玩家 i 與訓(xùn)練家 j 配對(duì)後,玩家 i + 1 不可能與訓(xùn)練家 0 ~ j 配對(duì)(要嘛能力太小配不上,要嘛已經(jīng)跟別人配過(guò)了)。所以玩家 i 只要往訓(xùn)練家 j + 1 方向找即可。
最後便可以知道最多可以湊出幾對(duì)。
此次分享到此為止,如有任何更加簡(jiǎn)潔的想法或是有說(shuō)明不清楚之地方,也煩請(qǐng)各位大大撥冗討論。