LintCode-子数组之和

题目描述:

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

样例

  给出 [-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3].

 1 public class Solution {
 2     /**
 3      * @param nums: A list of integers
 4      * @return: A list of integers includes the index of the first number 
 5      *          and the index of the last number
 6      */
 7     public ArrayList<Integer> subarraySum(int[] nums) {
 8       ArrayList<Integer> pos = new ArrayList<Integer>();
 9      if(nums.length==1 && nums[0]==0){
10          pos.add(0);
11          pos.add(0);
12          return pos;
13      }
14      int[] preSum = new int[nums.length];
15      int t=0;
16      for(int i=1;i<nums.length+1;i++){
17          Integer sum = 0;
18          for(int j=0;j<i;j++){
19              sum += nums[j];
20          }
21          if(sum==0){
22              pos.add(0);
23              pos.add(i-1);
24              return pos;
25          }
26          for(int k=0;k<preSum.length;k++){
27              if(preSum[k]==sum){
28                  pos.add(k+1);
29                  pos.add(i-1);
30                  return pos;
31              }
32          }
33          preSum[t++] = sum;
34      }
35      return pos;
36     }
37 }
原文地址:https://www.cnblogs.com/xiaocainiao2hao/p/5364632.html