目录
一、每日一题-1535. 找出数组游戏的赢家
1.滑动窗口(同向双指针)
class Solution:
def getWinner(self, arr: List[int], k: int) -> int:
# 滑动窗口
# 时复O(n)
n = len(arr)
if k >= n - 1:
return max(arr)
ans = arr[0]
l = 0
cnt = k
while l < n:
r = l + 1
while r < n and cnt:
if ans < arr[r]:
break
cnt -= 1
r += 1
if cnt == 0 or r == n:
return ans
else:
l = r
ans = arr[l] # 更新答案
cnt = k - 1
2.模拟
来自灵神题解(. - 力扣(LeetCode))。
class Solution:
def getWinner(self, arr: List[int], k: int) -> int:
# 模拟
if k >= len(arr) - 1:
return max(arr)
mx, win = arr[0], -1 # 第一次为赢自己,需要减去一次
for x in arr:
if x > mx:
mx = x
win = 0
win += 1
if win == k:
break
return mx # 放在外面,当遍历完但win != k时也要返回
二、70. 爬楼梯
class Solution:
def climbStairs(self, n: int) -> int:
# 滑动窗口
a, b = 1, 2
for _ in range(n - 1):
a, b = b, a + b
return a
三、509. 斐波那契数
class Solution:
def fib(self, n: int) -> int:
# 滑动窗口
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
return a
完
感谢你看到这里!一起加油吧!