原题
给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置。
给出[-3, 1, 2, -3, 4],返回[0, 2] 或者** [1, 3].**
解题思路
- 使用一个hash map记录前n项和,初始化dict[0] = -1 => 前-1 + 1 = 0项和等于0
- 以此类推,前1项和等于-3,前2项和等于-2,前3项和等于0,此时发现0存在于dict中,dict[0] = -1,所以加入-1 + 1和i,res = [0, 2]
- 也就是说一旦发现前i项和等于前j项和,那么i~j这一段的和等于零,把坐标加入到res数组
完整代码
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):
dict = {}
dict[0] = -1
sum = 0
res = []
for i, num in enumerate(nums):
sum += num
if sum in dict:
res.append(dict[sum] + 1)
res.append(i)
return res
dict[sum] = i