LeetCode Python 370 區間加法

2021-09-23 20:45:55 字數 1426 閱讀 5057

假設你有乙個長度為n的陣列,初始情況下所有的數字均為0,你將會被給出k​​​​​​​ 個更新的操作。

其中,每個操作會被表示為乙個三元組:[startindex, endindex, inc],你需要將子陣列a[startindex ... endindex](包括 startindex 和 endindex)增加inc

請你返回k次操作後的陣列。

示例:

輸入: length = 5, updates = [[1,3,2],[2,4,3],[0,2,-2]]

輸出: [-2,0,3,5,3]

解釋:

初始狀態:

[0,0,0,0,0]

進行了操作 [1,3,2] 後的狀態:

[0,2,2,2,0]

進行了操作 [2,4,3] 後的狀態:

[0,2,5,5,3]

進行了操作 [0,2,-2] 後的狀態:

[-2,0,3,5,3]

思路:

如果每一次操作都要處理整個區間上的數的話,太麻煩了,容易超時。

所以不妨先僅用區間的起點和終點來記錄對整個區間上的操作。

對於操作[start, end, inc], 把nums[start] += inc, nums[end +1] -= inc。

比如對於[0, 0, 0, 0, 0]進行操作[1,3,2],用新的陣列進行記錄:[0, 2, 0, 0,-2, 0 ]

想要得到處理的結果,則從前往後得到字首和陣列,即[0, 2, 2, 2, 0, 0],棄最後一位不要,因為它只是用來儲存操作。

class solution(object):

def getmodifiedarray(self, length, updates):

""":type length: int

:type updates: list[list[int]]

:rtype: list[int]

"""res = [0 for _ in range(length + 1)]

for update in updates:

start, end, inc = update[0], update[1], update[2]

res[start] += inc

res[end + 1] -= inc

for i in range(1, length):

res[i] += res[i - 1]

return res[:-1]

leetcode python3 整數轉羅馬數字

1.思路 將數字分解成千位數 百位數 個位數,對不同的位數中分3個階段進行討論 9的 5 8之間的 4的 1 3之間的。對於不同的分位數和階段加上不同的符號處理 2.class solution def inttoroman self,num str if int num 1000 0 for i ...

leetcode python3演算法 島嶼個數

1.題目描述 給定乙個由 1 陸地 和 0 水 組成的的二維網格,計算島嶼的數量。乙個島被水包圍,並且它是通過水平方向或垂直方向上相鄰的陸地連線而成的。你可以假設網格的四個邊均被水包圍。示例 1 輸入 11110 11010 11000 00000 輸出 1 示例 2 輸入 11000 11000 ...

單排leetcode python3 兩數相加

給定兩個非空鍊錶來代表兩個非負數,位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原因 342 465 807class listnode def init...