Leetcode 1477. 找两个和为目标值且不重叠的子数组 前缀和+DP

原题链接: Leetcode 1477. 找两个和为目标值且不重叠的子数组


cpp 复制代码
class Solution {
public:
    int minSumOfLengths(vector<int>& arr, int target) {
        int n=arr.size();
        int sum=0;
        int maxn=INT_MAX;
        vector<int> dp(n,maxn);//dp[i]表示以索引i之前的满足要求的子数组的长度的最小值
        map<int,int> mp;//mp[num]=i,表示从0到i,前缀和为num
        mp[0]=-1;//初始时
        int res=maxn;
        for(int i=0;i<n;i++){
            sum+=arr[i];
            if(i>0) dp[i]=dp[i-1];
            if(mp.count(sum - target)){
                int cur_len=i-mp[sum-target];
                int left_index=mp[sum-target];
                if(left_index>=0 && dp[left_index]!=INT_MAX){
                    res=min(res,dp[left_index]+cur_len);
                }
                if(i==0) dp[i]=min(maxn,cur_len);
                else dp[i]=min(dp[i-1],cur_len);
            }
            mp[sum]=i;
        }
        if(res==maxn) return -1;
        return res;
    }
};
相关推荐
ZLRRLZ6 分钟前
【数据结构】二叉树进阶算法题
数据结构·c++·算法
1白天的黑夜131 分钟前
二分查找-153-寻找旋转排序数组中的最小值-力扣(LeetCode)
c++·leetcode·二分查找
pimkle1 小时前
LC 135 分发糖果 JavaScript ts
leetcode·typescript
arin8761 小时前
【图论】倍增与lca
算法·图论
CoovallyAIHub1 小时前
别卷单模态了!YOLO+多模态 才是未来场景实战的“天选方案”
深度学习·算法·计算机视觉
guozhetao2 小时前
【图论,拓扑排序】P1347 排序
数据结构·c++·python·算法·leetcode·图论·1024程序员节
慕雪_mx2 小时前
最短路算法
算法
AI_Keymaker2 小时前
对话DeepMind创始人Hassabis:AGI、宇宙模拟与人类文明的下一个十年
算法
yi.Ist2 小时前
关于二进制的规律
算法·二进制·bitset
88号技师3 小时前
2025年7月一区SCI-投影迭代优化算法Projection Iterative Methods-附Matlab免费代码
开发语言·人工智能·算法·机器学习·matlab·优化算法