加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

[Swift Weekly Contest 112]LeetCode948. 令牌放置 | Bag of Tok

发布时间:2020-12-14 05:09:40 所属栏目:百科 来源:网络整理
导读: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

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,losing?token[i]?power,and gaining?1?point.
  • If we have at least?1?point,we may play the token face down,gaining?token[i]?power,and losing?1point.

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:

  1. tokens.length <= 1000
  2. 0 <= tokens[i] < 10000
  3. 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,P = 150
输出:1

示例 3:

输入:tokens = [100,P = 200
输出:2

提示:

  1. tokens.length <= 1000
  2. 0 <= tokens[i] < 10000
  3. 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 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读