Lintcode138 Subarray Sum solution 题解

【题目描述】

Given an integer array, find a subarray where the sum of numbers iszero. Your code should return the index of the first number and the index of the last number.

Notice:

There is at least one subarray that it's sum equals to zero.

给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置

【注】:至少有一个阵,它的总和等于零。

【题目链接】

www.lintcode.com/en/problem/subarray-sum/

【题目解析】

题目中的对象是分析子串和,那么我们先从常见的对数组求和出发,f(i)=∑​0​i​​nums[i] 表示从数组下标 0 开始至下标 i 的和。子串和为0,也就意味着存在不同的 i​1​​ 和 i​2​​ 使得 f(i​1​​)−f(i​2​​)=0, 等价于 f(i​1​​)=f(i​2​​). 思路很快就明晰了,使用一 vector 保存数组中从 0 开始到索引i的和,在将值push 进 vector 之前先检查 vector 中是否已经存在,若存在则将相应索引加入最终结果并返回。

【参考答案】

www.jiuzhang.com/solutions/subarray-sum/

你可能感兴趣的:(Lintcode138 Subarray Sum solution 题解)