【leetcode】1535. Find the Winner of an Array Game
题目如下:
Given an integer array
arr
of distinct integers 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 integer wins and remains at position0
and the smaller integer moves to the end of the array. The game ends when an integer winsk
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.Example 3:
Input: arr = [1,9,8,2,3,7,6,4,5], k = 7 Output: 9Example 4:
Input: arr = [1,11,22,33,44,55,66,77,88,99], k = 1000000000 Output: 99Constraints:
2 <= arr.length <= 10^5
1 <= arr[i] <= 10^6
arr
contains distinct integers.1 <= k <= 10^9
解题思路:题目不难,首先把arr[0]记为最大值,然后依次与arr[i]进行比较;如果最大值小于arr[i],则把arr[i]记为新的最大值,在比较的过程中同时记录每次出现的最大值赢的次数即可。如果arr遍历完成,还是没有哪个数字赢得超过k次以上,那么返回arr的最大值,因为最大值一定是可以一直赢下去的。
代码如下:
class Solution(object): def getWinner(self, arr, k): """ :type arr: List[int] :type k: int :rtype: int """ top = arr[0] top_win = 0 for i in range(1,len(arr)): if arr[i] > top: top = arr[i] top_win = 1 else: top_win += 1 if top_win == k: break return top