已知一个数组,其中有正数、0、负数,请写一个函数,找出这个数组中最长的,而且正数和负数个数相同的部分数组的长度。
#include <iostream>
using namespace std;
int array[] = {1, 2, -6, 0, 3, -2, 4, 0, -1, 3, -2, -4};
const int size = sizeof array / sizeof *array;
#define MAX(x, y) ((x) >= (y) ? (x) :(y))
int pos_neg_balance(int x[], int n)
{
int length;
int neg_over;
int min_over;
int max_over;
int mid;
int i;
int *loc;
length = neg_over = min_over = max_over = 0;
loc = new int[n + n + 1];
mid = n;
loc[mid] = 0;
for (i = 0; i < n; i++)
{
if (x[i] < 0)
neg_over++;
else if (x[i] > 0)
neg_over--;
if (neg_over < min_over)
{
min_over = neg_over;
loc[mid + min_over] = i + 1;
}
else if (neg_over > max_over)
{
max_over = neg_over;
loc[mid + max_over] = i + 1;
}
length = MAX(length, i + 1 - loc[mid + neg_over]);
}
delete[] loc;
return length;
}
void main()
{
int length = pos_neg_balance(array, size);
cout << "length = " << length << endl;
}