可以使用一次遍历(贪心法)来解决这个问题,时间复杂度为 O(n)。算法如下:
-
维护一个变量
max_len
记录最长连续递增子序列的长度。 -
维护一个变量
cur_len
记录当前连续递增子序列的长度。 -
遍历数组,如果当前元素大于前一个元素,则
cur_len
加 1,否则cur_len
重新置为 1。 -
在遍历过程中,不断更新
max_len
。
代码实现如下:
def findLengthOfLCIS(nums):
if not nums:
return 0
max_len = 1
cur_len = 1
for i in range(1, len(nums)):
if nums[i] > nums[i - 1]:
cur_len += 1
else:
cur_len = 1
max_len = max(max_len, cur_len)
return max_len
示例:
nums = [1, 3, 5, 4, 7]
print(findLengthOfLCIS(nums)) # 输出: 3
该方法只需要遍历一次数组,因此时间复杂度为 O(n),空间复杂度为 O(1)。