zoukankan      html  css  js  c++  java
  • 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];
        }
    }
  • 相关阅读:
    python之字典操作
    python之元组操作
    初始超算
    后缀自动机
    博弈
    曼哈顿最小生成树
    莫队算法
    主席树
    [HNOI2014]世界树
    [SDOI2011]消耗战
  • 原文地址:https://www.cnblogs.com/yonezu/p/13471754.html
Copyright © 2011-2022 走看看