Subarray Sum Closest

Given an integer array, find a subarray with sum closest to zero. Return the indexes of the first number and last number.

Example

Given [-3, 1, 1, -3, 5], return [0, 2], [1, 3], [1, 1], [2, 2] or [0, 4].

Solution

the different is equal to 0 , it's to check duplicated value in array but for this one we could know we can do a sorting to sum array then grap the

解题思路:

解题的重点就是位置i的Sum。

for other question sum close to zero means, Sum[i]~ i+1 Sum[j] and SUM[i] = SUM[j] , so we also know for this question , we can simple sort the SUM[i] array and find the close one.

相比于Subarray Sum问题,这里同样可以记录下位置i的sum,存入一个数组或者链表中,按照sum的值sort,再寻找相邻两个sum差值绝对值最小的那个,也就得到了subarray sum closest to 0。

题 Zero Sum Subarray | Data Structure and Algorithm 的变形题,由于要求的子串和不一定,故哈希表的方法不再适用,使用解法4 - 排序即可在 O(nlogn) 内解决。具体步骤如下:

首先遍历一次数组求得子串和。

对子串和排序。

逐个比较相邻两项差值的绝对

值,返回差值绝对值最小的两项。

为什么加1? 跟零的那个异曲同工,都是下一个开始然后到后面的索引趋近于0

results[0] = min(s[i+1].pos, s[i].pos) + 1

results[1] = max(s[i+1].pos, s[i].pos)

Last updated

Was this helpful?