[Swift Weekly Contest 112]LeetCode948. 令牌放置 | Bag of Tokens
阿新 • • 發佈:2018-11-25
You have an initial power P
, an initial score of 0
points, and a bag of tokens.
Each token can be used at most once, has a value token[i]
, and has potentially two ways to use it.
- If we have at least
token[i]
power, we may play the token face up, losingtoken[i]
1
point. - If we have at least
1
point, we may play the token face down, gainingtoken[i]
power, and losing1
point.
Return the largest number of points we can have after playing any number of tokens.
Example 1:
Input: tokens = [100], P = 50
Output: 0
Example 2:
Input: tokens = [100,200], P = 150
Output: 1
Example 3:
Input: tokens = [100,200,300,400], P = 200
Output: 2
Note:
tokens.length <= 1000
0 <= tokens[i] < 10000
0 <= P < 10000
你的初始能量為 P
,初始分數為 0
,只有一包令牌。
令牌的值為 token[i]
- 如果你至少有
token[i]
點能量,可以將令牌置為正面朝上,失去token[i]
點能量,並得到1
分。 - 如果我們至少有
1
分,可以將令牌置為反面朝上,獲得token[i]
點能量,並失去1
分。
在使用任意數量的令牌後,返回我們可以得到的最大分數。
示例 1:
輸入:tokens = [100], P = 50 輸出:0
示例 2:
輸入:tokens = [100,200], P = 150 輸出:1
示例 3:
輸入:tokens = [100,200,300,400], P = 200 輸出:2
提示:
tokens.length <= 1000
0 <= tokens[i] < 10000
0 <= P < 10000
76ms
1 class Solution { 2 func bagOfTokensScore(_ tokens: [Int], _ P: Int) -> Int { 3 var tokens = tokens.sorted(by:<) 4 var P = P 5 if tokens.count == 0 || P < tokens[0] 6 { 7 return 0 8 } 9 var n:Int = tokens.count 10 var p:Int = 0 11 var point:Int = 0 12 var ret:Int = 0 13 for i in 0...n 14 { 15 if i > 0 16 { 17 P += tokens[n-i] 18 point -= 1 19 } 20 while(p < n-i && P >= tokens[p]) 21 { 22 P -= tokens[p] 23 point += 1 24 p += 1 25 } 26 if p <= n-i 27 { 28 ret = max(ret, point) 29 } 30 } 31 return ret 32 } 33 }