如何改善以下代码的性能?

时间:2020-01-23 19:53:48

标签: c performance

这是问题。 找到具有数组值的输入变量的最大GCD。

输入如下:- 第一行包含两个整数N和Q。

第二行包含N个构成arr []的整数。

接下来,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++) {
        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;
}

如何在竞争性编程方面使此代码更好?还有哪些其他语言可以使此代码更好,更有效?

1 个答案:

答案 0 :(得分:-1)

最明显的性能改进是未对数组进行排序:您需要首先进行搜索(即O(\log(n))),而不是简单地向数组中添加元素,而是需要进行搜索。获取数组的最大值,您只需要第一个(或最后一个)条目即可。