分析下面代码的时间复杂度和空间复杂度#include<bits/stdc++.h> using namespace std; int n,m; //作业个数为n, 机器个数为m int main() { cin>>n>>m; vector<int> time(n); vector<vector<int> > machine(m); vector<int> sumTime(m,0); for(int i=0;i<n;++i){ cin>>time[i]; } sort(time.begin(),time.end(),greater<int>()); for(int i=0;i<n;++i){ int select=0; for(int j=0;j<m;++j){ if(sumTime[j]<sumTime[select]){ select=j; } } machine[select].push_back(time[i]); sumTime[select]+=time[i]; } int maxTime=sumTime[0]; for(int j=0;j<m;++j){ if(sumTime[j]>maxTime){ maxTime=sumTime[j]; } } for(int j=0;j<m;++j){ cout<<"第"<<j<<"台机器所需处理总时间为: "<<sumTime[j]<<endl; } cout<<"处理所有作业时间共需: "<<maxTime; return 0; }
时间: 2024-04-02 10:37:16 浏览: 14
时间复杂度分析:
1. 输入操作的时间复杂度为 O(1)。
2. 创建一个长度为 n 的 vector,时间复杂度为 O(n)。
3. 创建一个大小为 m*m 的二维 vector,时间复杂度为 O(m^2)。
4. 创建一个长度为 m 的 vector,时间复杂度为 O(m)。
5. 对长度为 n 的 vector 进行排序,时间复杂度为 O(nlogn)。
6. 对长度为 n 的 vector 进行 n 次遍历,对长度为 m 的 vector 进行 m*n 次遍历,时间复杂度为 O(nm)。
7. 对长度为 m 的 vector 进行一次遍历,时间复杂度为 O(m)。
因此,该代码的时间复杂度为 O(nlogn + nm + m^2),其中 O(nlogn) 主要来自于排序操作。
空间复杂度分析:
1. 创建一个长度为 n 的 vector,空间复杂度为 O(n)。
2. 创建一个大小为 m*m 的二维 vector,空间复杂度为 O(m^2)。
3. 创建一个长度为 m 的 vector,空间复杂度为 O(m)。
因此,该代码的空间复杂度为 O(m^2 + n + m),其中 O(m^2) 主要来自于二维 vector 的创建。
相关问题
#include<bits/stdc++.h> using namespace std; int main() { int n; cin>>n; int a[n]; for(int i=0;i<n;i++) cin>>a[i]; int m; cin>>m; int b; for(int i=0;i<m;i++) { cin>>b; int d=0; for(int j=0;j<n;j++) { if(b==a[j]) d++; } if(i<m-1) cout<<d<<" "; else cout<<d<<endl; } return 0; }时间优化
这段代码的时间复杂度为O(m*n),可以通过使用哈希表来优化时间复杂度。具体做法为先将数组a中的元素插入到哈希表中,然后对于每个b,从哈希表中查找是否存在对应的元素,如果存在则计数器加1,最后输出计数器即可。这样时间复杂度就可以优化为O(m+n)。以下是优化后的代码:
```
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin>>n;
unordered_map<int, int> mp;
for(int i=0;i<n;i++) {
int x;
cin>>x;
mp[x]++;
}
int m;
cin>>m;
for(int i=0;i<m;i++) {
int x;
cin>>x;
cout<<mp[x]<<" ";
}
cout<<endl;
return 0;
}
```
#include<bits/stdc++.h> using namespace std; int main() { int n,p; cin>>n; double a[n],s=0; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<n;i++) { p=i; for(int j=1;j<=n-i;j++) { p=i; for(int k=1;k<=j;k++) { s+=a[p++]; } } } printf("%.2lf\n",s); return 0; }时间优化
这段代码的时间复杂度为$O(n^3)$,可以考虑进行时间优化。可以使用前和来优化内层环,将时间复杂度降为$O(n^2)$。代码如下:
```
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
double a[n],s=0,prefixSum[n+1]={0};
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
prefixSum[i]=prefixSum[i-1]+a[i-1];
for(int i=0;i<n;i++)
{
for(int j=i+1;j<=n;j++)
{
s+=prefixSum[j]-prefixSum[i];
}
}
printf("%.2lf\n",s);
return 0;
}
```
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)