每日一题:Leetcode525.连续数组

发布时间:2023年12月20日

题目描述:

给定一个二进制数组?nums?, 找到含有相同数量的?0?和?1?的最长连续子数组,并返回该子数组的长度。

示例 1:

输入: nums = [0,1]
输出: 2
说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。

示例 2:

输入: nums = [0,1,0]
输出: 2
说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。

思路:将题目中0化成-1,求最长连续数组即求最长子数组为0的数组,和上一篇文章一样,哈希表中记录最早的子数组和的下标,如果当前位置的和在哈希表中存在,则能求出其长度

代码:

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

文章来源:https://blog.csdn.net/m0_73865858/article/details/135031666
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。