文章标题

来源:互联网 发布:詹姆斯生涯数据统计 编辑:程序博客网 时间:2024/06/06 04:00

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,然后去求总和为0的最长的连续数组的长度即可。然后就是用第n次出现的sum的值的索引去减去第一次出现这个sum的索引,因为这2个索引之间的数的值为0,即个数一致,故可得最长的子集。这里要注意子集不一定从nums[0]开始哦,这个要注意。
然后这里用到的map的函数find,要积累起来哦。
代码如下:

class Solution {public:    int findMaxLength(vector<int>& nums) {        for(int i=0;i<nums.size();i++){            if(nums[i]==0)nums[i]=-1;        }        map<int,int>MM;        MM[0]=-1;        int sum=0;        int res=0;        for(int i=0;i<nums.size();i++){            sum+=nums[i];            if(MM.find(sum)!=MM.end()){                res=max(res,i-MM[sum]);            }            else{                MM[sum]=i;            }        }        return res;    }};
0 0
原创粉丝点击