c++ - 为什么我的代码无法处理大型数组输入(> 10000)?
问题描述
int n;//input size of array
cin >> n;
vector <int> a(n);
vector <int> in;
for (int i = 0; i < n; i++)
cin >> a[i];//input array elements
if (n == 1) {
cout << "1" << "\n";
return 0;
}
for (int i = 1; i <= n ; i++)//to get longest incresing subsequence in the array
{
int flag = 0, j = i;
while (j < n && a[j] >= a[j - 1] ) {
j++;
flag = 1;
}
if (flag == 1) {
in.push_back(j - i + 1);
i = j;
}
}
int maxval = in[0]; //to get maximum sized element from in
for (int i = 1; i < in.size(); i++)
if (in[i] > maxval)
maxval = in[i];
cout << maxval << "\n";
我为 < 10000 的值尝试了相同的代码,它工作正常...我已经用 long long int 替换了所有 int 然后它还显示矢量下标超出范围错误...
样本输入:
10
49532 49472 49426 49362 49324 49247 49165 49162 49108 49093
我期待 0 但它显示“向量下标超出范围”
解决方案
问题的原因是这个声明
int maxval = in[0];//to get maximum sized element from in
使用此输入时向量in
为空
10
49532 49472 49426 49362 49324 49247 49165 49162 49108 49093
所以你可能不使用下标运算符。
你可以写例如
int maxval = in.empty() ? 0 : in[0];
推荐阅读
- c# - ASP.NET Core 2.1 功能测试中的继承启动错误
- javascript - 如何使用 Javascript/JQuery 获取重定向 URL?
- java - GWT FileUpload OnClick
- visual-studio-code - 当指定的 WebView 面板在 VSCode 扩展键绑定贡献点中处于活动状态时,是否有任何上下文?
- c - 读取 CSV 文件 - 内存问题
- macros - 为什么用宏调用我的 home-rolled (reduce) 函数会影响未来对该函数的调用?
- php - 多态关系
- javascript - 根据输入值点击链接
- c++ - 从 C++ 代码中提取算术运算信息
- html - XPath //* vs //元素 vs //