prefix sum 前缀和数组

Maximum Size Subarray Sum Equals k

找出数组里面最长的一段数,和等于k。

这题其实是 prefix sum array + two sum,利用前缀和数组实现快速区间和查询,同时 two sum 的方法快速地位 index.

这种 prefix sum 的下标要格外小心,很容易标错。。target value 差也是,写之前多手动过几个 case 保平安。

public class Solution {
    public int maxSubArrayLen(int[] nums, int k) {
        if(nums == null || nums.length == 0) {
            return 0;
        }

        int maxSize = 0;
        // 前i项sum
        // 需要最大长度,所以需要记录index
        HashMap<Integer, Integer> map = new HashMap<>();
        // 前0项的和是0
        map.put(0,0);
        int sum = 0;

        for(int i = 0; i < nums.length; i++) {
            sum += nums[i];
            if(map.containsKey(sum - k)) {
                maxSize = Math.max(maxSize, i - map.get(sum - k) + 1);
            } 

            if(!map.containsKey(sum)) map.put(sum, i + 1);
        }

        return maxSize;
    }
}

results matching ""

    No results matching ""