leetcode 674.最长连续递增序列
时间: 2025-06-26 18:21:25 浏览: 6
### 解题思路
LeetCode 第 674 题的目标是找到给定数组中的最长连续递增子序列的长度。此问题可以通过一次线性扫描来解决,时间复杂度为 O(n),空间复杂度可以优化到 O(1)[^1]。
#### 关键点分析
- **连续性**:题目强调的是“连续”,因此只需要比较相邻两个元素即可判断是否构成递增关系。
- **动态规划 vs 贪心算法**:虽然可以用动态规划的思想解决问题,但由于只需记录当前的最大值而无需回溯历史状态,贪心策略更为高效[^3]。
---
### Python 实现
以下是基于贪心算法的 Python 实现:
```python
class Solution:
def findLengthOfLCIS(self, nums):
if not nums: # 如果输入为空,则返回0
return 0
max_len = 1 # 至少有一个元素时,最小长度为1
current_len = 1 # 当前连续递增序列的长度初始化为1
for i in range(1, len(nums)): # 从第二个元素开始遍历
if nums[i] > nums[i - 1]: # 判断当前元素是否大于前一个元素
current_len += 1 # 是则增加当前长度
max_len = max(max_len, current_len) # 更新全局最大长度
else:
current_len = 1 # 否则重置当前长度
return max_len # 返回最终结果
```
上述代码通过维护 `current_len` 和 `max_len` 来跟踪当前连续递增序列的长度以及整体的最大长度。
---
### Java 实现
下面是等效的 Java 版本实现:
```java
public class Solution {
public int findLengthOfLCIS(int[] nums) {
if (nums.length == 0) { // 处理边界情况
return 0;
}
int maxLength = 1; // 初始化最大长度
int currentLength = 1; // 初始化当前长度
for (int i = 1; i < nums.length; i++) {
if (nums[i] > nums[i - 1]) { // 若满足递增条件
currentLength++; // 增加当前长度
maxLength = Math.max(maxLength, currentLength); // 更新最大长度
} else {
currentLength = 1; // 不满足递增条件时重新计数
}
}
return maxLength; // 返回结果
}
}
```
该版本逻辑与 Python 类似,但在语法上更贴近 Java 的特性[^4]。
---
### C++ 实现
对于 C++ 用户,下面是一个高效的解决方案:
```cpp
#include <vector>
#include <algorithm> // 使用 std::max 函数
using namespace std;
class Solution {
public:
int findLengthOfLCIS(vector<int>& nums) {
if (nums.empty()) { // 边界处理
return 0;
}
int result = 1; // 结果变量
int count = 1; // 当前连续递增序列长度
for (size_t i = 1; i < nums.size(); ++i) {
if (nums[i] > nums[i - 1]) { // 检查递增条件
count++;
result = max(result, count);
} else {
count = 1; // 重置计数器
}
}
return result; // 返回最终结果
}
};
```
这段代码同样遵循了单次遍历的原则,并利用标准库函数简化了一些操作。
---
### 小结
三种语言的核心思想一致,均采用了一种简单的线性扫描方式完成任务。这种方法不仅易于理解,而且性能优越,在实际应用中非常实用[^2]。
---
阅读全文
相关推荐
















