Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何减少执行时间??我应该使用函数还是继续使用嵌套循环_C - Fatal编程技术网

C 如何减少执行时间??我应该使用函数还是继续使用嵌套循环

C 如何减少执行时间??我应该使用函数还是继续使用嵌套循环,c,C,我必须在这段代码中减少执行时间。在这个问题中,n的值可能高达10^8。因此,我认为嵌套循环并没有那么好,因为它对于大数据的存储非常滞后。所以我想知道我是否使用函数而不是内部循环。这个想法是否能缩短执行时间?? 或者,即使我使用Functions,情况也是一样 #include <stdio.h> long long a[500001]={0}; int main() { long long n,i,j,flag,sum=0,temp,count=0; scanf("%lld",&a

我必须在这段代码中减少执行时间。在这个问题中,n的值可能高达10^8。因此,我认为嵌套循环并没有那么好,因为它对于大数据的存储非常滞后。所以我想知道我是否使用函数而不是内部循环。这个想法是否能缩短执行时间?? 或者,即使我使用Functions,情况也是一样

#include <stdio.h>
long long a[500001]={0};
int main()
{
long long n,i,j,flag,sum=0,temp,count=0;

scanf("%lld",&n);
for(i=0;i<n;i++)
    scanf("%lld",&a[i]);
for(i=0;i<n;i++){
    for(j=0;j<n;j++)
    if(a[j]>=a[i])
        count++;
     flag=a[i]*(count);
     if(flag>sum)
        sum=flag;
     count=0;
}
printf("%lld",sum);
return 0;
}
#包括
长a[500001]={0};
int main()
{
长n,i,j,标志,和=0,温度,计数=0;
scanf(“%lld”、&n);

对于(i=0;i我认为您的问题在于算法:

for(i=0;i<n;i++){
for(j=0;j<n;j++)
产出:60

复杂性 如果排序是O(nlog(n)),我的算法是O(n),那么得到的是O(nlog(n))复杂度。

您应该使用更高效的算法,它可能不依赖于函数。如果
n
增加到100000000,为什么要用更低的数字声明a?您需要更高效的数据结构。函数和循环是针对不同问题的不同构造。您正在比较苹果和香蕉(橙子还是太接近苹果了——两个都是圆的)。好的,知道了。我的算法效率不高。你觉得复杂度如何。你能推荐一个我可以从中学习复杂度的网站吗。或者你可以在这里告诉我。但是顺便说一句,你的解决方案可能需要更多的时间,因为你需要先对数据进行排序,然后才能找到总数。我想这可能需要更多的时间。你的看法是什么?@user5910213 y你可以找到关于时间复杂性的信息。当你使用大o(o)时,你只需要得到最慢的操作。因为如果你有两个操作,一个o(n)和另一个o(n^2),当n取大值时,我是说你的代码不会花费太多时间,因为你需要先对元素排序,然后再进一步排序
 int max=0,tmp=0;
 for(i=0;i<n;i++){
      tmp=array[i]*(i+1);
      if(max<tmp) max=tmp;
  }
    tmp     | max | iteration  
    0       |0    | 0  
    53      |53   | 1  
  30*2=60   |60   | 2  
  20*3=60   |60   | 3  
  14*4=56   |60   | 4  
  4*5=20    |60   | 5