674. 最长连续递增序列

79 阅读1分钟

1. 题目

leetcode.cn/problems/lo…

image.png

2. 考点

  1. 考取了双指针的用法

3. 解析

可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列

当r指针快速向右移动时 都会判断是否左边的值都小于右边的值,如果不小于,则更新左指针,获取到当前的最大值。

4.核心代码

 # (双指针做法)
class Solution:
    def findLengthOfLCIS(self, nums: List[int]) -> int:
        n = len(nums)
        if n == 1: return 1
        right = 1
        left = 0
        ans = 0
        while right < n:
            while right < n and nums[right - 1] < nums[right]:
                right += 1
            ans = max(ans, right - left)
            left = right
            right += 1
        return ans
# 暴力解法
class Solution:
    def findLengthOfLCIS(self, nums: List[int]) -> int:
        n = len(nums)
        if n == 1: return 1
        m = 1
        ret = 0
        for i in range(1, n):
            if nums[i-1] < nums[i]:
                m += 1
            else:
                m = 1
            ret = max(ret, m)
        return ret