【发布时间】:2019-11-23 16:03:13
【问题描述】:
我写它是为了一次处理一个测试用例。 要么在线评委耗时太长,要么返回错误答案
来源:我用来测试的problem
它非常适合小箱子:
#include <iostream>
#include <algorithm>
#include <vector>
int LIS[100000];
void LS (int *arr , int n)
{
if (n == 0)
{
LIS[0] = 1;
return;
}
if (LIS[n])
{
return;
}
int i = 0;
int max = 0;
while (i < n)
{
if (arr[i] < arr[n])
{
LS(arr,i);
if (LIS[i] + 1 > max)
{
max = 1 + LIS[i];
}
}
++i;
}
LIS[n] = max;
}
int main()
{
int n;
std::cin >> n;
int arr[n];
for(int i = 0 ; i < n ; ++i) std::cin >> arr[i];
LS(arr,n-1);
std::sort (LIS , LIS+n);
std::cout << "\n" << LIS[n-1] << "\n";
}
【问题讨论】:
-
int n; std::cin >> n; int arr[n];- 不是有效的标准 C++。标准 C++ 不支持 VLA(可变长度数组)。不幸的是,一些编译器支持它作为扩展,但这些扩展通常可以关闭(我建议这样做)。你想要的是std::vector。 -
递归通常比迭代慢得多。在尾递归的情况下,编译器可以将其转换为迭代函数。在您的情况下,这不是尾递归。您可以将代码重写为尾递归或编写迭代函数。 dev.to/deciduously/tail-recursion-35nb