这个题考的时间复杂度
#include <stdio.h>
int main(){
int n,h=0;
scanf("%d",&n);
int a[n+1];
a[0]=0;
for(int i=1;i<=n;i++){
scanf("%d",&h);
a[i]=a[i-1]+h;
}
int m;
int b,c,s1,s2;
scanf("%d",&m);
for(int i=0;i<m;i++){
scanf("%d %d",&b,&c);
int temp;
if(b>c){
temp=c;
c=b;
b=temp;
}
s1=0;s2=0;
// while(b<c){
// s1=s1+a[b-1];
// b++;
// }
s1=a[c-1]-a[b-1];
s2=a[n]-s1;
if(s1<s2) printf("%d\n",s1);
else printf("%d\n",s2);
}
return 0;
}
在代码修改之前,时间复杂度根据for循环里while循环内的语句,即O(n2)
代码修改后:
将数组中本来存储的每两个点的距离改为存储每个点与第一个点的距离,这样可以省去while循环,算法复杂度变为O(n)。