运行时间过长,这还能怎么改吗,还是算法太复杂了。

#include <stdio.h>
int n, a[200000] = { 0 }, sum=0;
int hanshu(int *p,int *f,int *b)
{
int *xinp=NULL;
int *xinf = NULL;
int s = 0;
for (int i = 1; i <= n; i++)
{
for (int j = 0; j < 2 * n; j++)
{
if (*(b + j) == i)
{
if (s== 1)
{
xinf = b + j;
break;
}
else
{
xinp = b + j;
s = 1;
}
}
}
b = &a[0];
s = 0;
if (p < xinp&&xinf < f&&p < xinf&&xinp < f)//在中间
{
sum = sum + (xinp - p);
sum = sum +( f - xinf);
p = xinp;
f = xinf;
}
else if ((p > xinp&&xinf < f&&p >xinf&&xinp < f)|| (p > xinp&&xinf < f&&p < xinf&&xinp < f))//都在左边 一左一中
{
sum = sum + (p - xinp);
sum = sum + (f - xinf);
p = xinp;
f = xinf;
}
else if ((p < xinp&&xinf > f&&p <xinf&&xinp > f)|| (p < xinp&&xinf > f&&p < xinf&&xinp < f)|| (p == xinp))//都在右边 一右一中
{
sum = sum + (xinp-p);
sum = sum + ( xinf-f);
p = xinp;
f = xinf;
}
}
return 0;
}
int main()
{
int *p = &a[0];
int *f = &a[0];
int b = &a[0];
scanf_s("%d", &n);
for (int q = 0; q < 2
n; q++)
{
scanf_s(" %d", &a[q]);
}
hanshu(p,f,b);
printf("%d", sum);
return 0;
}

img

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。