You are given an integer n
, the number of teams in a tournament that has strange rules:
n / 2
matches are played, and n / 2
teams advance to the next round.(n - 1) / 2
matches are played, and (n - 1) / 2 + 1
teams advance to the next round.Return the number of matches played in the tournament until a winner is decided.
Example 1:
Input: n = 7 Output: 6 Explanation: Details of the tournament: - 1st Round: Teams = 7, Matches = 3, and 4 teams advance. - 2nd Round: Teams = 4, Matches = 2, and 2 teams advance. - 3rd Round: Teams = 2, Matches = 1, and 1 team is declared the winner. Total number of matches = 3 + 2 + 1 = 6.
Example 2:
Input: n = 14 Output: 13 Explanation: Details of the tournament: - 1st Round: Teams = 14, Matches = 7, and 7 teams advance. - 2nd Round: Teams = 7, Matches = 3, and 4 teams advance. - 3rd Round: Teams = 4, Matches = 2, and 2 teams advance. - 4th Round: Teams = 2, Matches = 1, and 1 team is declared the winner. Total number of matches = 7 + 3 + 2 + 1 = 13.
Constraints:
1 <= n <= 200
This problem can be solved efficiently using a simple mathematical observation. The core idea is that each match eliminates one team. To get down to one winning team from n teams, we need to eliminate n-1 teams. Since each match eliminates one team, the total number of matches must be n-1.
The problem describes a tournament where teams are paired off in matches. If there's an odd number of teams, one team gets a bye (advances without playing). The key insight is that regardless of whether the number of teams is even or odd in any round, exactly one team is eliminated per match.
To end up with a single winner, we must eliminate all but one of the n initial teams. This means we must eliminate n - 1 teams. Since one team is eliminated per match, the total number of matches played is n - 1.
Time Complexity: O(1) - The solution involves a single subtraction operation, making it constant time. It doesn't depend on the input size n.
Space Complexity: O(1) - The solution uses a constant amount of extra space, regardless of the input size.
The code implementations below directly reflect the mathematical solution: return n - 1;
class Solution:
def numberOfMatches(self, n: int) -> int:
return n - 1
class Solution {
public int numberOfMatches(int n) {
return n - 1;
}
}
class Solution {
public:
int numberOfMatches(int n) {
return n - 1;
}
};
func numberOfMatches(n int) int {
return n - 1
}
/**
* @param {number} n
* @return {number}
*/
var numberOfMatches = function(n) {
return n - 1;
};
function numberOfMatches(n: number): number {
return n - 1;
}
All these code snippets have the same underlying logic: they directly return n - 1
, representing the total number of matches needed. This is the most efficient and concise way to solve this problem.