力扣(LeetCode) - 1688. 比赛中的配对次数

208 阅读1分钟

1688. 比赛中的配对次数

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

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

思路

我总觉的是有些规律的,但是抓不到,所以我还是先把最简单的方法先写下来,打印一下每次的输出效果,在进行一次比对就好

代码1

 var numberOfMatches = function(n) {
  let count = 0
  while(n > 1) {
    // 如果是偶数
   if(n % 2 === 0){
    count = count + n / 2
     n = n / 2
   } else {
     count = count + (n-1) / 2
     n = (n-1) / 2 + 1
   }
  }
  return count
};

这里好像就结束了,是不是,平平无奇,但是 提示:

  • 1 <= n <= 200 诶,这里我有点想要找一下规律了
for(let i = 1; i < 200; i++) {
  console.log(`${i}:`,numberOfMatches(i))
}

image.png ??? 这个规律 我有一个大胆的想法!

image.png 来源:力扣(LeetCode)

链接:leetcode-cn.com/problems/co…

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。