1. 程式人生 > >[LintCode 138] 子陣列之和(Python)

[LintCode 138] 子陣列之和(Python)

題目描述

給定一個整數陣列,找到和為零的子陣列。你的程式碼應該返回滿足要求的子陣列的起始位置和結束位置

注意事項
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

複雜度分析

時間複雜度O(n),空間複雜度O(n)