LintCode138 子数组之和

  1. Subarray Sum
    Given an integer array, find a subarray where the sum of numbers is zero. Your code should return the index of the first number and the index of the last number.

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

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

思路:如果两个索引处的sum值一样,则中间的连续子数组和为0

public List<Integer> subarraySum(int[] nums) {
        // write your code here
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
        List<Integer> res = new ArrayList<Integer>();
        map.put(0,-1);
        int sum = 0;
        for(int i = 0;i < nums.length; i++){
            sum += nums[i];
            if(map.containsKey(sum)){
                res.add(map.get(sum) + 1);
                res.add(i);
                break;
            }
            map.put(sum, i);
        }
        return res;
    }

猜你喜欢

转载自blog.csdn.net/fruit513/article/details/84935213