30天Leetcode挑战(12):1535 find the last winner

碎碎念

好几天没写文了,但其实每天都有上去看题(例如昨天的蚂蚁相撞),也都有在跟朋友讨论。
这几天有很多可以用外乡人作法来处理的题目,感觉是蛮有趣的。

题干

给一个长度的array,里面有各种数字,要取前两个比大小,赢的人留下来,输的丢到数组的最后面,返回先赢了k次的数字

解题思路

这题虽然是中等,但感觉其实没有那么难。也许是因为这几天都是抖机灵的题目,我直接就开始想要怎么跳过那些数组替换的步骤。

于是我就在想,如果输了一次,就代表他不可能赢,所以我只需要跑过一整个数组,看谁会在前面赢到指定次数。也就是说,除了第一个数之外,后面的都是去检查后面k-1个数是否比他大。

class Solution:    def getWinner(self, arr: List[int], k: int) -> int:        current_winner = arr[0]        win_count = 0        for i in range(1, len(arr)):            if arr[i] > current_winner:                current_winner = arr[i]                win_count = 1            else:                win_count += 1            if win_count == k:                return current_winner                        # 如果我们已经比较了足够多的次数,超过了数组长度,那么当前的最大元素是无敌的            if i - win_count > len(arr):                break        return current_winner

我根本不管把数字删除跟丢到后面的部分,直接开始比。反正win-count都是从一开始,就直接看什么时候新数字可以到目标k这样。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章