C++:最长算术子数组
C++ : Longest Arithmetic Subarray
给定一个输入数组,输出必须是给定数组中最长算术子数组的长度。
我得到的输出与所需输出不同。我不明白我哪里错了,我还是个初学者,所以请忽略新手的错误,并在我错的地方帮助我。提前谢谢。
这是代码:
#include <iostream>
using namespace std;
int main () {
int n;
cin>>n;
int array[n];
for (int i=0;i<n;i++)
{
cin>>array[i];
}
int length = 2;
int cd = array[1] - array[0];
for(int i=2; i<n; i++){
if(array[i] - array[i-1] == cd){
length++;
}
else {
cd = array[i] - array[i-1];
length=2;
}
cout<<length<<" ";
}
return 0;
}
如果您正在寻找一个子序列,那么您所做的将无法实现。
例如:
Input: nums = [9,4,7,2,10]
Output: 3
Explanation:
The longest arithmetic subsequence is [4,7,10].
您需要一个嵌套的循环结构(当前拥有的for循环中的for循环(来实现这一点,因为您希望用整个数组而不仅仅是下一个元素来检查某个cd
。
如果你需要找到一个子序列/子数组,因为元素必须彼此相邻,那么你的程序就会正常工作。
代码中还有一个很大的错误,就是在for循环中打印长度。不确定这是否用于调试目的。
这里的问题是每次更新后都要重置length
。您需要一个变量来存储每个length
的最大值。
#include <iostream>
using namespace std;
const int maxn = 1e6;
int arr[maxn];
int main ()
{
int n; cin>>n;
for (int i=0;i<n;i++) { cin >> arr[i]; }
int length = 2;
int maxLength = 2; //max variable
int cd = arr[1] - arr[0];
for(int i=2; i<n; i++){
if(arr[i] - arr[i-1] == cd) {length++;}
else {
cd = arr[i] - arr[i-1];
length=2;
}
//cout<<length<<" "; //remove this
maxLength = max(maxLength, length); //update maxLength
}
cout << maxLength;
}
更多美学注意事项:
array
是C++中用于声明std::array
的关键字。尽管该程序可能仍在运行,但它可能会造成不必要的混乱。int array[n]
是一个VLA(可变长度阵列(。这不是一个C++标准。它可能工作,也可能不工作,这取决于编译器。为什么";使用命名空间std"被认为是不好的做法?
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '