题解 | #未排序数组中累加和为给定值的最长子数组系列问题补1#前缀和

未排序数组中累加和为给定值的最长子数组系列问题补1

https://www.nowcoder.com/practice/545544c060804eceaed0bb84fcd992fb

#include <iostream>
#include <unordered_map>
using namespace std;
int n,presum,a[100005],st,ma;
unordered_map<int,int>hmap;
int main() {
    cin>>n;
    for(int i=0;i<n;i++){
        int t;
        scanf("%d",&t);
        if(t>0)a[i]=1;//正负转化为1,-1,正数与负数个数相等转化为和为0
        else if(t<0)a[i]=-1;
        else a[i]=0;
    }
    hmap.insert({0, -1});
    for(int i=0;i<n;i++){
        presum+=a[i];
        if(hmap.find(presum)!=hmap.end()){
            st=hmap[presum];
        ma=max(ma,i-st);
        }
        else hmap.insert({presum,i});
    }
    cout<<ma;
}

题目4【算法讲解046【必备】构建前缀信息的技巧-解决子数组相关问题】 https://www.bilibili.com/video/BV1Sj411q7fi/?share_source=copy_web&vd_source=5065fa61022691e8df35c771a30e6d29

全部评论

相关推荐

03-24 21:23
已编辑
郑州大学 Java
点赞 评论 收藏
分享
在看数据的傻狍子很忙碌:学生思维好重,而心很急,自己想想真的能直接做有难度的东西吗?任何错误都是需要人担责的,你实习生可以跑路,你的同事领导呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务