C++ 使用数组存储1*10^5个整数项时如何避免TLE
当数组(n)中的条目数为1*10^5时,我的代码显示TLE。我该怎么办?我看到了提交状态,在所有情况下都运行良好,除了最后一种情况,当n为100000时,它显示时间限制错误 问题:: 我的解决方案: 代码:C++ 使用数组存储1*10^5个整数项时如何避免TLE,c++,arrays,C++,Arrays,当数组(n)中的条目数为1*10^5时,我的代码显示TLE。我该怎么办?我看到了提交状态,在所有情况下都运行良好,除了最后一种情况,当n为100000时,它显示时间限制错误 问题:: 我的解决方案: 代码: #包括 #包括 使用名称空间std; int main(){ ios_base::与_stdio同步(false); cin.tie(空); cout.tie(空); int t; cin>>t; int-arr[t]; int ARRFEQ[t]; 整数和=1; 对于(int i=0;i>
#包括
#包括
使用名称空间std;
int main(){
ios_base::与_stdio同步(false);
cin.tie(空);
cout.tie(空);
int t;
cin>>t;
int-arr[t];
int ARRFEQ[t];
整数和=1;
对于(int i=0;i>arr[t];
总和+=arr[t];
arrfreq[i]=总和;
}
int m;
cin>>m;
int-qsn[m];
int k;
对于(int i=0;i>qsn[i];
}
对于(int j=0;j您正在使用一个循环来计算桩数。您可以做的是在为qsn输入的同一个循环中找到答案。只需输入qsn并在该循环中找到桩数。这将降低代码的时间复杂性并消除TLE错误。我看到了其他解决方案在互联网上发现std::lower_bound函数是用来避免T.L.E
但有一件事,正如互联网上提到的,这个函数返回一个指向下限的指针,那么,为什么我们要从中减去c,然后再减去+1(在最后一行的第二行)?(参考代码)
#包括
使用名称空间std;
int main()
{
int n,i,m,j,cnt=0,ans,x,sum=0;
cin>>n;
int a[n],c[n];
对于(i=0;i>a[i];
总和+=a[i];
c[i]=总和;
}
cin>>m;
int b[m];
对于(i=0;i>b[i];
对于(j=0;jStackOverflow!欢迎使用Stackoverflow!您能解释更多可能的未知单词TPE
(缩写为what)和10万行吗?请删除代码中不必要的空行。#包括使用命名空间std;
-永远不要这样做。int-arr[t]是一个可变长度数组,而不是C++。一些编译器支持它,作为扩展(从C99借用)。可能是在吹你的栈。使用<代码> STD::向量< /代码>。@ HcDeVe,TLE代表“超过时限”。。根据经验,TLE错误是由低效的算法引起的。很可能,您需要一个更好的算法。通过优化实现,您可能可以节省一些时间,但一般来说,您需要一个更高效的算法。按您所说的做了,它仍然显示TLE…只是显示代码的最后更改部分。让我知道我你的意思是别的。intk;for(inti=0;i>qsn[i];k=qsn[i];for(intj=0;j
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int t;
cin>>t;
int arr[t];
int arrfreq[t];
int sum=1;
for(int i=0;i<t;i++ )
{
cin>>arr[t];
sum+=arr[t];
arrfreq[i]=sum;
}
int m;
cin>>m;
int qsn[m];
int k;
for(int i =0;i<m;i++)
{
cin>>qsn[i];
}
for(int j =0;j<t;j++)
{
if(k<arrfreq[j])
{
cout<<j+1<<"\n";
break;
}
if(k==arrfreq[j])
{
cout<<j+2<<"\n";
break;
}
}
}
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,i,m,j,cnt=0,ans,x,sum=0;
cin>>n;
int a[n],c[n];
for(i=0; i<n; i++){
cin>>a[i];
sum+=a[i];
c[i]=sum;
}
cin>>m;
int b[m];
for(i=0; i<m; i++) cin>>b[i];
for(j=0; j<m; j++)
{
cout<<lower_bound(c,c+n,b[j])-c+1<<endl;
}
return 0;
}