gpt4 book ai didi

c++ - 给定一个范围,我必须计算数组中数字的频率。给定的解决方案是否有效?

转载 作者:行者123 更新时间:2023-11-30 04:34:32 25 4
gpt4 key购买 nike

#include<iostream.h>

int main()
{
int a[10]={1,2,3,5,2,3,1,5,3,1};
int i;
int c[10]={0};

for(i = 0 ; i < 10 ; i++)
c[a[i]]++;

for(i=0;i<10;i++)
cout<<i<<": "<<c[i]<<endl;

return 0;
}

该算法的运行时间为 O(n),但它占用了 O(n) 的额外空间。我可以做得更好吗?

谢谢!

最佳答案

取决于对您来说重要的是什么 - 您可以创建一个算法,时间复杂度为 O(n^2),但空间复杂度为 O(1)(使用两个循环,请参见下面的代码),但您无法提高下面的时间复杂度O(n).

for(i=0;i<10;i++) {
count = 0;
for(j=0;j<10;j++)
if (c[j] == i) count++;
cout<<i<<": "<<count<<endl;
}

O(1) 空间的另一种可能性是对数组进行就地排序,然后遍历一次,使用就地合并排序应该具有时间复杂度 O(n log n)。

关于c++ - 给定一个范围,我必须计算数组中数字的频率。给定的解决方案是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5930402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com