LeetCode contest 200 5476. 找出数组游戏的赢家 Find the Winner of an Array Game

简介: LeetCode contest 200 5476. 找出数组游戏的赢家 Find the Winner of an Array Game

LeetCode contest 200 5476. 找出数组游戏的赢家 Find the Winner of an Array Game


Table of Contents

一、中文版

二、英文版

三、My answer

四、解题报告


一、中文版

给你一个由 不同 整数组成的整数数组 arr 和一个整数 k 。

每回合游戏都在数组的前两个元素(即 arr[0] 和 arr[1] )之间进行。比较 arr[0] 与 arr[1] 的大小,较大的整数将会取得这一回合的胜利并保留在位置 0 ,较小的整数移至数组的末尾。当一个整数赢得 k 个连续回合时,游戏结束,该整数就是比赛的 赢家 。

返回赢得比赛的整数。

题目数据 保证 游戏存在赢家。

 

示例 1:

输入:arr = [2,1,3,5,4,6,7], k = 2

输出:5

解释:一起看一下本场游戏每回合的情况:

因此将进行 4 回合比赛,其中 5 是赢家,因为它连胜 2 回合。

示例 2:

输入:arr = [3,2,1], k = 10

输出:3

解释:3 将会在前 10 个回合中连续获胜。

示例 3:

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

输出:9

示例 4:

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

输出:99

 

提示:

2 <= arr.length <= 10^5

1 <= arr[i] <= 10^6

arr 所含的整数 各不相同 。

1 <= k <= 10^9


二、英文版

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.
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
arr contains distinct integers.
1 <= k <= 10^9


三、My answer

class Solution:
    def getWinner(self, arr: List[int], k: int) -> int:
        res = 0
        n = len(arr)
        cnt = 0 # 记录每个数胜利的次数
        i = 0
        idx = 1
        while i + idx < n and cnt < min(n,k):
            if arr[i] < arr[i+idx]:
                i = i+idx
                idx = 1
                cnt = 1
            else:
                cnt += 1
                if cnt == k:
                    return arr[i]
                idx += 1
        return arr[i]


四、解题报告

数据结构:数组

算法:遍历

实现:

1、根据题目限制,不能暴力遍历,肯定会超时,所以想办法只经过一次遍历即可。

2、如果 k 大于 arr 的长度,由于将 arr 中所有数字两两比较之后一定会选出 “赢家”,所以此时不需要遍历 k 次,一个数字只需要赢 min(n,k) 次即可,其中 n 是 arr 的长度。

3、每次比较两个数,如果是连胜,则 count += 1,判断 count 与 k 的关系,如果等于 k,则返回。

4、如果是新的数字,则 idx 和 count 都需要重新归1。 idx 表示当前 i 与往后第 idx 个数比较大小。

如果 i+idx 的数是赢家, i 直接跳到 i + idx 即可,即 i=i+idx。因为期间的数字都败给第 i 个数了

相关文章
|
3月前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
128 67
|
5月前
|
人工智能 前端开发 JavaScript
拿下奇怪的前端报错(一):报错信息是一个看不懂的数字数组Buffer(475) [Uint8Array],让AI大模型帮忙解析
本文介绍了前端开发中遇到的奇怪报错问题,特别是当错误信息不明确时的处理方法。作者分享了自己通过还原代码、试错等方式解决问题的经验,并以一个Vue3+TypeScript项目的构建失败为例,详细解析了如何从错误信息中定位问题,最终通过解读错误信息中的ASCII码找到了具体的错误文件。文章强调了基础知识的重要性,并鼓励读者遇到类似问题时不要慌张,耐心分析。
106 5
|
5月前
|
存储 Java
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
144 2
|
5月前
|
存储 JavaScript 前端开发
JavaScript Array(数组) 对象
JavaScript Array(数组) 对象
54 3
|
5月前
|
数据采集 JavaScript 前端开发
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
|
6月前
|
Go
Golang语言之数组(array)快速入门篇
这篇文章是关于Go语言中数组的详细教程,包括数组的定义、遍历、注意事项、多维数组的使用以及相关练习题。
95 5
|
7月前
|
Python
PyCharm View as Array 查看数组
PyCharm View as Array 查看数组
174 1
|
10月前
|
Python
使用array()函数创建数组
使用array()函数创建数组。
187 3
|
10月前
|
JavaScript 前端开发
总结TypeScript 的一些知识点:TypeScript Array(数组)(下)
一个数组的元素可以是另外一个数组,这样就构成了多维数组(Multi-dimensional Array)。
|
8月前
|
索引