题解 | #牧场里的编号顺序#
牧场里的编号顺序
https://www.nowcoder.com/practice/6741b77f486a493da5258738323ddd3e
大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
题目考察的知识点
- 数组遍历与连续子序列查找
题目解答方法的文字分析
本题要求设计一个 O(n) 时间复杂度的算法,找出给定数组中最长的连续递增奶牛编号的长度。我们可以通过遍历一次数组,在遍历过程中记录当前连续递增序列的长度,并更新最大长度。具体步骤如下:
- 初始化当前连续递增序列长度为1,最大连续递增序列长度为1。
- 从数组的第二个元素开始遍历,比较当前元素和前一个元素是否连续递增(即当前元素是否大于前一个元素)。
- 如果连续递增,则当前连续递增序列长度加1,并更新最大连续递增序列长度为当前连续递增序列长度和最大连续递增序列长度中的较大值。
- 如果不连续递增,则重置当前连续递增序列长度为1,继续向后遍历。
- 遍历完成后,最大连续递增序列长度即为所求的结果。
本题解析所用的编程语言
C++
完整且正确的编程代码
#include <vector>
using namespace std;
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param ids int整型vector
* @param n int整型
* @return int整型
*/
int longestConsecutive(vector<int>& ids, int n) {
if (n <= 1) {
return n;
}
int currentLength = 1; // 当前连续递增序列的长度
int maxLength = 1; // 最大连续递增序列的长度
// 从数组的第二个元素开始遍历
for (int i = 1; i < n; i++) {
// 比较当前元素和前一个元素是否连续递增(即当前元素是否大于前一个元素)
if (ids[i] > ids[i - 1]) {
// 如果连续递增,则当前连续递增序列长度加1
currentLength++;
// 更新最大连续递增序列长度为当前连续递增序列长度和最大连续递增序列长度中的较大值
maxLength = max(maxLength, currentLength);
} else {
// 如果不连续递增,则重置当前连续递增序列长度为1,继续向后遍历
currentLength = 1;
}
}
// 遍历完成后,最大连续递增序列长度即为所求的结果
return maxLength;
}
};
阿Q的题解 文章被收录于专栏
阿Q秋招刷过的题

