leetcode 每日一题6-3

  1. 连续数组

这道题和6-2的每日一题思路(6-2每日一题)比较相似,都是利用前缀和+哈希表进行求解
在这里插入图片描述
我们设在nums[i]前每有一个1,那么前缀+1,每有一个零,那么前缀-1,那么如果在nums[i]-nums[j]之间0 1数量相等,则前缀也一定相等
举个例子
在这里插入图片描述
由图我们可以看出,有两组前缀和相等,之后在利用下标求出长度即可。
特殊情况:在这里插入图片描述
在这种情况下,0只出现了一次,但是我们必须考虑这种情况所以在最开始预设一个mp[0]=-1
计算长度为3-()-1=4

class Solution {
public:
    int findMaxLength(vector<int>& nums) {
        unordered_map<int,int >mp;
        int n=nums.size();
        int res=0;
        int pos=0;
        mp[0]=-1;
        for(int i=0;i<n;i++)
        {
            if(nums[i]==0)
            {
                pos++;
            }
            else
            {
                pos--;
            }
             if(mp.count(pos))
             {
                 res=max(res,(i-mp[pos]));
             }
             else{
                 mp[pos]=i;
             }
        }
        return res;

    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值