1. 程式人生 > 實用技巧 >LeetCode #1652. Defuse the Bomb

LeetCode #1652. Defuse the Bomb

題目

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