-
发表于 2024.05.05
-
固定长度的滑动窗口题目,可以使用
left
和right
维护一个左闭右开的滑动窗口,每次遍历的时候,该窗口向右移动一个元素即可。也可以不用上述两个变量,毕竟是固定长,可以根据遍历的数组位置计算出来。维护窗口左右两侧指针的版本:
class Solution: def decrypt(self, code: List[int], k: int) -> List[int]: n = len(code) ans = [] left = 1 if k > 0 else (k + n) % n right = (1 + k + n) % n if k > 0 else 0 i = left cur_sum = 0 while i != right: cur_sum += code[i] i = (i + 1 + n) % n for i in range(len(code)): ans.append(cur_sum) cur_sum = cur_sum - code[left] + code[right] left = (left + 1 + n) % n right = (right + 1 + n) % n return ans
直接计算版本:
from itertools import islice class Solution: def decrypt(self, code: List[int], k: int) -> List[int]: n = len(code) ans = [] cur_sum = sum(code[1:k+1] if k >= 0 else code[k:]) for i in range(len(code)): ans.append(cur_sum) cur_sum -= code[(i + 1 + n) % n] if k >= 0 else code[(i + k + n) % n] cur_sum += code[(i + k + 1 + n) % n] if k >= 0 else code[i] return ans
- LC 题目链接
-