1. 程式人生 > 實用技巧 >1535. Find the Winner of an Array Game

1535. Find the Winner of an Array Game

Given an integer arrayarrofdistinctintegers and an integerk.

A game will be played between the first two elements of the array (i.e.arr[0]andarr[1]). In each round of the game, we comparearr[0]witharr[1], the larger integerwins and remains at position0and the smaller integer moves to the end of the array. The game ends when an integer winsk

consecutive rounds.

Returnthe integer which will win the game.

It isguaranteedthat 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.

Example 3:

Input: arr = [1,9,8,2,3,7,6,4,5], k = 7
Output: 9

Example 4:

Input: arr = [1,11,22,33,44,55,66,77,88,99], k = 1000000000
Output: 99

Constraints:

  • 2 <= arr.length <= 10^5
  • 1 <= arr[i] <= 10^6
  • arrcontainsdistinctintegers.
  • 1 <= k <= 10^9
class Solution {
    public int getWinner(int[] arr, int k) {
        int cur = arr[0], cnt = 0;
        for(int i = 1; i < arr.length; i++) {
            if(arr[i] > cur) {
                cur = arr[i];
                cnt = 0;
            }
            if(++cnt == k) return cur;
        }
        return cur;
    }
}

欲哭無淚啊,就差那麼一點就對了

要注意的是兩個是並行的if,如果更新了較大值也是要++cnt的,用else的話會少考慮一次。

如果k超級大的話直接返回最大值即可,也不用排序,一次就能找出最大值