查找给定序列是单调的还是严格单调的

finding if a given sequence is monotonic or strictly monotonic

本文关键字:单调 查找      更新时间:2023-10-16

我正在实现序列的简单解决方案,以查看它是单调的还是严格的单调。我尝试了不同的输入,角落/最坏情况,它有效,为了更好地呈现问题,以下是问题的具体陈述。

确定数字序列是严格单调的还是单调的。

输入:

包含整数 n (2 ≤ n ≤ 10^9( - 序列中的元素数。它后面有 n 个元素。

输出:

如果序列是严格单调的,则写">

2",否则如果序列是单调的,则在其他情况下写"1"和"0"。

我的代码:

#include <iostream>
//#include <cmath>
using namespace std;
int main()
{
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
int n, a, b, p, q, e, c; e = 0; q = 0; p = 0;
cin >> n >> a;
for (int i = 0; i < n - 1; i++)
{
cin >> b;
if (a > b) { p = 1;
if (q) { cout << 0; return 0; }
}
if (a < b) { q = 1;
if (p) { cout << 0; return 0; }
}
if (a == b) { e = 1; }
a = b;
}
if (e) { cout << 1; }
else { cout << 2; }
return 0;
}

我的代码虽然没有通过我大学的判断,但它给出了时间限制错误。 我的代码可能有什么问题?我的意思是,你必须遍历所有 n,这段代码是 O(n(,n <= 10^9。

我试过你的代码。
我不得不移除两个 freopen,这打破了原本似乎是 MRE 的东西。

它已成功编译。

我输入 4,用于 4 个输入,然后
输入 2
1

输出为 0。

a( 您的代码忽略第二个值
之后的所有内容 b( 您的代码提前
终止 c( 对于严格单调递减序列(未忽略的部分("2,1",它输出"其他情况"的值

我想这并不能回答你脑海中的问题。
但是你将不得不问那个,因为你写的那个我认为回答了。

如果您的问题实际上是"我如何找出代码的哪一部分导致错误?我建议使用调试器:
如何使用gdb进行调试?
如何在代码块中调试?

或者,更一般地说,
https://ericlippert.com/2014/03/05/how-to-debug-small-programs/