Given an integer array arr of distinct integers and an integer k.
A game will be played between the first two elements of the array (i.e. arr[0] and arr[1]). In each round of the game, we compare arr[0] with arr[1], the larger integer wins and remains at position 0, and the smaller integer moves to the end of the array. The game ends when an integer wins k consecutive rounds.
Return the integer which will win the game.
It is guaranteed that there will be a winner of the game.
Example 1:
Input: arr = [2,1,3,5,4,6,7], k = 2 Output: 5 Explanation: Let's see the rounds of the game: Round | arr | winner | win_count 1 | [2,1,3,5,4,6,7] | 2 | 1 2 | [2,3,5,4,6,7,1] | 3 | 1 3 | [3,5,4,6,7,1,2] | 5 | 1 4 | [5,4,6,7,1,2,3] | 5 | 2 So we can see that 4 rounds will be played and 5 is the winner because it wins 2 consecutive games.
Example 2:
Input: arr = [3,2,1], k = 10 Output: 3 Explanation: 3 will win the first 10 rounds consecutively.
Constraints:
2 <= arr.length <= 1051 <= arr[i] <= 106arr contains distinct integers.1 <= k <= 109This approach involves simulating the game as described. In each round, compare the first two elements. The larger element stays at the front, while the smaller one is moved to the end. Track the number of consecutive wins for the current maximum element. The game terminates once an element wins k consecutive games, or we can conclude the maximum element will always win once it has dominated for enough rounds due to its magnitude relative to other elements.
The code starts by assuming the first element is the maximum. It then iterates through the rest of the elements. If the current max is greater than the current element, increase the win count; otherwise, update the current max and reset the win count. The loop runs until an element wins k consecutive times or until the end of the array, returning the max.
C++
Java
Python
C#
JavaScript
Time Complexity: O(n) where n is the length of the array.
Space Complexity: O(1) as we use only constant space.
This variant uses a concept very similar to the simulation approach but adds a breaking condition for improved efficiency. It exploits the game's characteristics by noting if the current maximum wins continuously even before counting to k, it will naturally reach the conclusion. This allows early termination if the maximum element becomes apparent quickly.
This C language solution enhances the standard simulation method with a conditional break. It re-evaluates upon encountering the largest possible number, indicated by iterating long enough to guarantee the outcome irrespective of k, hence optimizing rounds required for final decision.
C++
Java
Python
C#
JavaScript
Time Complexity: O(n), potentially terminating faster.
Space Complexity: O(1).
| Approach | Complexity |
|---|---|
| Simulated Rounds Approach | Time Complexity: O(n) where n is the length of the array. |
| Break Condition Approach | Time Complexity: O(n), potentially terminating faster. |
Find the Winner of the Circular Game - Leetcode 1823 - Python • NeetCodeIO • 15,280 views views
Watch 9 more video solutions →Practice Find the Winner of an Array Game with our built-in code editor and test cases.
Practice on FleetCode