题目链接: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; } };