[LintCode 138] 子陣列之和(Python)
阿新 • • 發佈:2019-01-27
題目描述
給定一個整數陣列,找到和為零的子陣列。你的程式碼應該返回滿足要求的子陣列的起始位置和結束位置
注意事項
There is at least one subarray that it’s sum equals to zero.樣例
給出 [-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3].
思路
用字典儲存中間結果。key為從第一個元素到當前元素的和,value為下標。當某個key值第二次出現時,則它們中間的子陣列和一定為0。
程式碼
class Solution:
"""
@param nums: A list of integers
@return: A list of integers includes the index of the first number
and the index of the last number
"""
def subarraySum(self, nums):
# write your code here
res = []
if nums is None or len(nums) <= 0:
return res
d = {0: -1}
sum = 0
for i in range(len(nums)):
sum += nums[i]
if sum in d:
res.append(i)
res.append(d[sum] + 1 )
return res
d[sum] = i
return res
複雜度分析
時間複雜度