上题目:

我的答案:
// headtail.c
#include<stdio.h>
int headtail(int a[],int la);
int main()
{
int a[] = {3,6,2,1,4,5,2};
printf("The eq has %d pair(s)\n",headtail(a,sizeof(a) / sizeof(a[0])));
return 0;
}
int headtail(int a[],int la)
{
int i = 0;
int j = la - 1;
int sumh = a[i];
int sumt = a[j];
int count = 0;
while(i < la && j >= 0)
{
if(sumh < sumt)
{
i++;
sumh = sumh + a[i];
}
else if(sumh > sumt)
{
j--;
sumt = sumt + a[j];
}
else
{
count++;
i++;
j--;
sumh = sumh + a[i];
sumt = sumt + a[j];
}
}
return count;
}标准答案:
int head_tail(int x[],int n)
{
int prefix = 0;
int suffix = 0;
int prefix_idx = 0;
int suffix_idx = 0;
int count = 0;
while(suffix_idx >= 0 && prefix_idx <= n - 1)
{
if(prefix < suffix)
prefix += x[prefix_idx++];
else if(prefix < suffix)
suffix += x[suffix_idx--];
else
{
count++;
prefix += x[prefix_idx++];
suffix += x[suffix_idx--];
}
}
return count;
}差不多的答案,虽然我的程序看起来长。
本文介绍了一种优化后的头尾和尾头算法,通过比较元素和调整索引来计算数组中满足特定条件的对数。算法通过迭代过程实现了高效地计数,适用于寻找数组中满足和相等条件的元素对。

被折叠的 条评论
为什么被折叠?



