1546. 和为目标值的最大数目不重叠非空子数组数目(前缀和+dp)

class Solution {
    public int maxNonOverlapping(int[] nums, int target) {
        int n = nums.length;
        int[] dp = new int[n+1];   // nums前i个数的最大满足条件子数组数目
        Map<Integer,Integer> map = new HashMap<>();
        map.put(0,0);
        int sum = 0;
        for(int i = 1; i <= n; i++) {       
            sum += nums[i-1];
            dp[i] = dp[i-1]; // 先初始化当前数没有选的情况
            if(map.containsKey(sum - target)) {
                dp[i] = Math.max(dp[i],dp[map.get(sum-target)]+1); // 当前数可作为最后一个数来选择的情况
            }
            map.put(sum,i);
        }
        return dp[n];
    }
}
原文地址:https://www.cnblogs.com/yonezu/p/13471754.html