大家好,我是程序员吴师兄。

很多人刷题一段时间后会进入疲倦期,我建议不妨参加一下 LeetCode 的周赛调节一下心情,周赛总共有四题,一简单两中等一困难,难度逐级上升,难的真的很难,一个小时做不出来很正常,简单的有时候会让你怀疑是不是看错题目,即使你刚学习算法不久也能做出来。

今天就给大家分享一道 LeetCode 周赛的题目,希望能鼓励你开始周赛之旅。

比如说第 219 场周赛的第一题:

题目描述是这样子的(为了更友好的阅读体验,建议你一字不漏的阅读完题目)。

给你一个整数 n ,表示比赛中的队伍数。比赛遵循一种独特的赛制:

如果当前队伍数是偶数 ,那么每支队伍都会与另一支队伍配对。总共进行 n / 2 场比赛,且产生 n / 2 支队伍进入下一轮。
如果当前队伍数为奇数 ,那么将会随机轮空并晋级一支队伍,其余的队伍配对。总共进行 (n - 1) / 2 场比赛,且产生(n - 1) / 2 + 1 支队伍进入下一轮。
返回在比赛中进行的配对次数,直到决出获胜队伍为止。

示例 1:

输入:n = 7
输出:6
解释:比赛详情:
- 第 1 轮:队伍数 = 7 ,配对次数 = 3 ,4 支队伍晋级。
- 第 2 轮:队伍数 = 4 ,配对次数 = 2 ,2 支队伍晋级。
- 第 3 轮:队伍数 = 2 ,配对次数 = 1 ,决出 1 支获胜队伍。
总配对次数 = 3 + 2 + 1 = 6

示例 2:

输入:n = 14
输出:13
解释:比赛详情:
- 第 1 轮:队伍数 = 14 ,配对次数 = 7 ,7 支队伍晋级。
- 第 2 轮:队伍数 = 7 ,配对次数 = 3 ,4 支队伍晋级。 
- 第 3 轮:队伍数 = 4 ,配对次数 = 2 ,2 支队伍晋级。
- 第 4 轮:队伍数 = 2 ,配对次数 = 1 ,决出 1 支获胜队伍。
总配对次数 = 7 + 3 + 2 + 1 = 13

题目挺好理解,解题也不难,有三种思考方向:

1、按部就班法

直接根据题意进行分类讨论,如果此时比赛队伍为偶数直接除 2 记录为比赛次数,晋级的队伍为n/2 ,如果此时比赛队伍为奇数则先减一,让剩下的队伍配对,次数为(( n - 1 ) /2) ,晋级的队伍为n/2 + 1

class Solution {
    public int numberOfMatches(int n) {
        int res = 0;
        while(n > 1){
            if(n % 2==0){
                n/=2;
                res += n;
            }else{
                res += (( n - 1 ) /2);
                n = n/2 + 1;
            }
        }
        return res;
    }
}

2、无脑递归法

class Solution {
public:
    int numberOfMatches(int n) {
        if( n == 1return 0;
        return n/2 + numberOfMatches((n+1)/2);
    }
};

3、不讲武德法

冠军只有一个,意味着 n - 1 个队伍需要淘汰,而每场比赛只能淘汰一个队伍,换言之需要淘汰 n - 1 个队伍需要比赛 n - 1 次,所以,答案出来了,一行代码 AC。

class Solution {
    public int numberOfMatches(int n) {
        return n-1;
    }
}

是不是感觉我上我也行,有兴趣的小伙伴不妨去参与一下,说不定能拿个奖~


©著作权归作者所有:来自51CTO博客作者mb5fe18fab305a5的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. LeetCode 题解 | 1312. 让字符串成为回文串的最少插入次数
  2. LeetCode 题解 | 1297.子串的最大出现次数
  3. 基于PHP实现短信验证码发送次数限制解析
  4. php统计2个数据中同时出现的次数最多的单词
  5. PHP结合Redis来限制用户或者IP某个时间段内访问的次数
  6. 确定记录出现的次数
  7. 计算mysql中每天的发生次数
  8. python1.返回一个字符串中出现次数第二多的单词 2.字符串中可能
  9. java 正则表达式查找某段字符串中所有小写字母开头的单词并统计

随机推荐

  1. android上不错的开源库
  2. webservice1(队列上传 呼叫)
  3. Service Intent must be explicit的解决
  4. Android(安卓)根据一个传入的String选择s
  5. android full screen
  6. Android硬件抽象层学习
  7. Android 相对布局 简单编程
  8. 获取android联系人信息
  9. Android(安卓)Service不被杀死
  10. android attr.xml