LeetCode #1652. Defuse the Bomb
题目
解题方法
按照k=0、k>0、k<0三种情况分类讨论,k=0直接返回全零数组;k>0时先初始化一个sumk,把第一个元素处理好,然后遍历剩下的元素,sumk作为滑动窗口计算总和,结果存入返回值rat;k<0时类似也用滑动窗口做。
时间复杂度:O(n)
空间复杂度:O(n)
代码
class Solution:
def decrypt(self, code: List[int], k: int) -> List[int]:
if not k:
return [0 for _ in range(len(code))]
elif k > 0:
sumk = sum(code[1:k % len(code) + 1])
rat = [sumk]
for i in range(1, len(code)):
sumk = sumk - code[i] + code[(i + k) % len(code)]
rat.append(sumk)
return rat
else:
sumk = sum(code[(k + 1) % len(code) - 1:])
rat = [sumk]
for i in range(1, len(code)):
sumk = sumk - code[(i + k - 1) % len(code)] + code[i-1]
rat.append(sumk)
return rat