[leetcode]525. Contiguous Array

xiaoxiao2021-02-28  119

题目链接:https://leetcode.com/problems/contiguous-array/#/description

 

 

Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 and 1.

Example 1:

Input: [0,1] Output: 2 Explanation: [0, 1] is the longest contiguous subarray with equal number of 0 and 1.

 

Example 2:

Input: [0,1,0] Output: 2 Explanation: [0, 1] (or [1, 0]) is a longest contiguous subarray with equal number of 0 and 1.

思路:题意是 给定一个只含有0,1的整数数组,找到数组中最长的一个子序列,该序列中1的个数和0的个数相同。

         0和1的数组,可以考虑把0换成-1  ,变成1 和-1 的数组,那么本质上就是找是有下标从i-j的总和为0的子数组。

         然后存储一个hashmap用来存放sum,如果接下来的sum在hashmap里面出现过,则说明hashmap里面出现的那个值的索引的开始,到目前的索引的和为0。

 

 

class Solution{ public: int findMaxLength(vector<int>& nums) { int sum=0,result=0; vector<int> res(nums.size()+1,0); for(int i=0;i<nums.size();i++) { if(nums[i]==0) nums[i]=-1; } unordered_map<int,int> m; m[0]=-1; for(int i=0;i<nums.size();i++) { sum+=nums[i]; if(m.find(sum)!=m.end()) result=max(result,i-m[sum]); else m[sum]=i; } return result; } };

 

 

 

 

 

 

 

转载请注明原文地址: https://www.6miu.com/read-50038.html

最新回复(0)