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]; } }