假设有一个数组x[],它有n个元素,每一个都大于0,称x[0] + x[1] + ... + x[i]是个前置和,而x[j] + x[j + 1] + ... + x[n - 1]则是后置和,请写一个程序,求出x[]中有多少组相同的前置和和后置和
题目虽然很简单,可是还是。。。
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
using namespace std;
int array[] = {1, 2, 2, 1};
const int size = sizeof array / sizeof *array;
int findGominator(int *array, int size)
{
if (array == NULL || size <= 0)
return -1;
int leftIndex = -1;
int rightIndex = size;
int prefix = 0;
int suffix = 0;
int count = 0;
while (leftIndex < size && rightIndex >= 0)
{
if (prefix < suffix)
{
leftIndex++;
prefix += array[leftIndex];
}
else if (prefix > suffix)
{
rightIndex--;
suffix += array[rightIndex];
}
else if (prefix == suffix && prefix != 0)
{
count++;
cout << "leftIndex = " << leftIndex << endl;
cout << "rightIndex = " << rightIndex << endl;
leftIndex++;
rightIndex--;
prefix += array[leftIndex];
suffix += array[rightIndex];
}
else
{
leftIndex++;
rightIndex--;
prefix += array[leftIndex];
suffix += array[rightIndex];
}
}
return count;
}
void main()
{
int ret = findGominator(array, size);
cout << "ret = " << ret << endl;
}
#include <iostream>
#include <cmath>
using namespace std;
void main()
{
int array[] = {1, 2, 3, 4, 4, 3, 2, 1};
const int size = sizeof array / sizeof *array;
int leftIndex = 0;
int rightIndex = size - 1;
int prefixSum = array[0];
int suffixSum = array[size - 1];
while (leftIndex < size && rightIndex >= 0)
{
if (prefixSum == suffixSum)
{
cout << "prefixSum = " << prefixSum << endl;
cout << "suffixSum = " << suffixSum << endl;
leftIndex++;
rightIndex--;
prefixSum += array[leftIndex];
suffixSum += array[rightIndex];
}
else if (prefixSum < suffixSum)
{
leftIndex++;
prefixSum += array[leftIndex];
}
else if (prefixSum > suffixSum)
{
rightIndex--;
suffixSum += array[rightIndex];
}
}
}