LeetCode-525 连续数组

题意:给定一个二进制数组, 找到含有相同数量的 0 和 1 的最长连续子数组(的长度)。
思路:从头开始遍历,维护一个map记录1与0的数量差,到当前时,如果曾经出现过一样的数量差,说明当前pos到之前pos这段数量相等

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

你可能感兴趣的:(思维,Leetcode)