刷题系列 - 比赛配对问题

51 阅读1分钟

1.问题描述

小R正在组织一个比赛,比赛中有 n 支队伍参赛。比赛遵循以下独特的赛制:

  • 如果当前队伍数为 偶数,那么每支队伍都会与另一支队伍配对。总共进行 n / 2 场比赛,且产生 n / 2 支队伍进入下一轮。
  • 如果当前队伍数为 奇数,那么将会随机轮空并晋级一支队伍,其余的队伍配对。总共进行 (n - 1) / 2 场比赛,且产生 (n - 1) / 2 + 1 支队伍进入下一轮。

小R想知道在比赛中进行的配对次数,直到决出唯一的获胜队伍为止。


2.测试样例

样例1:

输入:n = 7
输出:6

样例2:

输入:n = 14
输出:13

样例3:

输入:n = 1
输出:0


3.代码实现

有点好笑这个问题。n个队伍获得一个冠军则需要淘汰掉n-1个队伍,因为每次配对必定伴随着一个队伍的淘汰,所以会进行n-1次配对。

function solution(n) {
    return n-1;
}

function main() {
    console.log(solution(7) === 6);
    console.log(solution(14) === 13);
    console.log(solution(1) === 0);
}

main();