C 如何改进以下代码';她的表现如何?
问题是。 使用数组的值查找输入变量的最大GCD 投入如下:- 第一行包含两个整数,N和Q 第二行包含构成arr[]的N个整数 接下来,Q行包含一个整数M,她希望返回的时间(以秒为单位)C 如何改进以下代码';她的表现如何?,c,performance,C,Performance,问题是。 使用数组的值查找输入变量的最大GCD 投入如下:- 第一行包含两个整数,N和Q 第二行包含构成arr[]的N个整数 接下来,Q行包含一个整数M,她希望返回的时间(以秒为单位) #include <stdio.h> int main(){ int n,q; scanf("%d %d", &n,&q); int a[n]; int gcdn[n]; for (int i = 0;i < n; i++) {
#include <stdio.h>
int main(){
int n,q;
scanf("%d %d", &n,&q);
int a[n];
int gcdn[n];
for (int i = 0;i < n; i++) {
scanf("%d",&a[i]); }
while (q>0){
q--;
int x;
scanf("%d",&x);
for(int i=0;i<n;i++) {
gcdn[i] = gcd(a[i],x);
}
printf("%d \n",max(gcdn,n));
}
}
int gcd (int a, int b) {
if (b==0)
return a;
else
return gcd(b, a%b);
}
int max(int *a,int n) {
int max= a[0];
for(int i = 1;i<n;i++) {
if(a[i]>min) {
max= a[i];
}
}
return max;
}
#包括
int main(){
int n,q;
scanf(“%d%d”、&n和&q);
int a[n];
int gcdn[n];
对于(int i=0;i0){
q--;
int x;
scanf(“%d”和&x);
对于(int i=0;i而言,最明显的性能改进是数组没有排序:您需要先进行搜索(即O(\log(n))
),而不是简单地向数组中添加元素,但一旦需要获得数组的最大值,您只需要第一个(或最后一个)条目。我投票将此问题作为主题外的问题结束,因为它属于,您可以在计算GCD时跟踪最大值,无需存储它们并再次遍历。这几乎不是一个改进。您建议执行插入排序,即O(n log n)与现有O(n)相比解决方案。最明显的方法已经在评论部分说明了。