c++ - 使用数组和向量之间的时间复杂度差异
问题描述
对于查找第 n 个丑数(其素因数分解仅包含 2,3,5 )(包括 1)的问题。当我使用以下使用向量的解决方案时,所花费的时间是 >1.013,这显示了 TLE,但是当我使用数组时,所花费的时间是0.9 被接受了!谁能解释为什么会这样?
#include <bits/stdc++.h>
using namespace std;
#define llb long long int
int main() {
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
llb ugly[n]; // To store ugly numbers
llb i2 = 0, i3 = 0, i5 = 0;
llb next_multiple_of_2 = 2;
llb next_multiple_of_3 = 3;
llb next_multiple_of_5 = 5;
llb next_ugly_no = 1;
ugly[0] = 1;
for (int i=1; i<n; i++)
{
next_ugly_no = min(next_multiple_of_2,
min(next_multiple_of_3,
next_multiple_of_5));
ugly[i] = next_ugly_no;
if (next_ugly_no == next_multiple_of_2)
{
i2 = i2+1;
next_multiple_of_2 = ugly[i2]*2;
}
if (next_ugly_no == next_multiple_of_3)
{
i3 = i3+1;
next_multiple_of_3 = ugly[i3]*3;
}
if (next_ugly_no == next_multiple_of_5)
{
i5 = i5+1;
next_multiple_of_5 = ugly[i5]*5;
}
} /*End of for loop (i=1; i<n; i++) */
cout<<next_ugly_no<<endl;
}
return 0;
}
解决方案
如果您正确编写代码,性能应该几乎相同。
可能发生的事情(因为您没有显示另一种情况)是在std::vector
您重新分配多次的情况下,可能是通过在每次外循环迭代时重新创建对象。如果您重新使用该对象,那么您应该会看到非常相似的性能。
边注:
llb ugly[n]; // To store ugly numbers
这是非标准 C++:可变长度数组 (VLA)。
推荐阅读
- excel - 从多个文件复制垂直排列的表格,并将它们水平粘贴到主文件中
- c++ - 将原始指针列表存储在向量中的替代方法
- swift - 使用 Timer 用颜色填充整个屏幕 - SwiftUI
- python - 如何从 pandas Dataframe 的日期时间中删除时间。列的类型是str和objects,但是值是datetime
- dapr - dapr 卸载不会清理它创建的所有容器
- typescript - 无法从 graphql-tools 导入 IResolvers
- php - 设置状态按钮,想要将状态设置回默认值
- python - 如何将 SMTP 服务器代码与电子邮件发送相结合
- python - 烧瓶重定向发送获取请求但不重定向
- c - 读取字符串时的C程序分段错误