给定一个二进制数组, 找到含有相同数量的 0 和 1 的最长连续子数组(的长度)。
int findMaxLength(int* nums, int numsSize) {
int res = 0;
int temp = 0;//记录一段长度相加的值
int *map = (int *)malloc(sizeof(int)*(numsSize+1));
int record[100000];//记录最早出现某个数的位置
for(int i = 0;i < 100000;i++)
{
record[i] = -1;
}
int index = 50000;
for(int i = 0;i < numsSize;i++)
{
if(nums[i]==0)nums[i] = -1;
}
map[0] = 0;
for(int i = 0;i<numsSize;i++)
{
temp += nums[i];
map[i+1] = temp;
}
for(int i=0;i<numsSize+1;i++)
{
if(record[map[i]+index] == -1)
{
record[(map[i]+index)]=i;
}
}
for(int i = 2;i<numsSize+1;i++)
{
if(i-record[map[i]+index] > res)
{
res = i-record[map[i]+index];
}
}
return res;
}
执行用时:316 ms