[LeetCode1688. 比赛中的配对次数] | 刷题打卡

403 阅读2分钟
  • 掘金团队号上线,助你 Offer 临门! 点击 查看活动详情

前言

本题核心: 不识庐山真面目,只缘身在此山中

题目描述

这题是LeetCode1688. 比赛中的配对次数,也是今天的每日一题。

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

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

解题思路

很简单,我照着题目的思路老老实实做就好了。

解题代码

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

咋看一看没什么问题,刷题常规打开评论区。我发现了这个

WX20210411-182541@2x.png

????什么鬼?n-1。我花了2分钟整理思绪,认真审题,然后完美作答。你告诉我n-1就可以了? 我不信,怎么肥四?怎么可以这样,我在审题栞栞👀

WX20210411-182828@2x.png

比赛遵循一种独特的赛制:.....直到决出获胜队伍为止!!!

WX20210411-183023@2x.png

好吧,不讲武德啊~

新解题思路

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

总结

不管是在代码的世界还是在现实世界,我们总会被一些问题所困扰,深陷问题的泥泞中无法自拔,今天这道题让我明白,跳脱出来看问题,或者说有些时候问题它就不是问题。

如果你有被笑到的话,给我点个赞吧💐