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]; } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步