j

jaryue

V1

2023/05/06阅读:17主题:默认主题

leetcode 674. 最长连续递增序列

leetcode 674. 最长连续递增序列


题目描述

  1. 最长连续递增序列

给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。

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

示例 1:

输入:nums = [1,3,5,4,7] 输出:3 解释:最长连续递增序列是 [1,3,5], 长度为3。 尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。 示例 2:

输入:nums = [2,2,2,2,2] 输出:1 解释:最长连续递增序列是 [2], 长度为1。

提示:

1 <= nums.length <= 104 -109 <= nums[i] <= 109

解题思路

法1

指针
申请一个指针

  1. 首先判断给定的数组是否为空,如果是则直接返回0,否则开始遍历数组。用变量maxLength记录最长连续递增子序列的长度,用变量curLength记录当前连续递增子序列的长度,初始化curLength为1,因为任何单个元素都是连续递增子序列。

遍历数组时,若当前元素大于前一个元素,则将curLength加1,否则将curLength重置为1,表示从当前元素开始重新计算连续递增子序列的长度。如果curLength大于maxLength,则更新maxLength的值。

最后返回maxLength的值即可。

  1. (i作为递增数量的判断位置)

判断数据是否递增:i-1位置的数值小于i位置为递增

循环遍历数组直到遍历完整个数组返回最长的递增长度.

  • 时间复杂度(O(n))
  • 空间复杂度(O(1))

执行结果

法1

func findLengthOfLCIS(nums []int) int {
    if len(nums) == 0 {
        return 0
    }
    maxLength, curLength := 11//分别储存最大的长度与当前的长度
    for i := 1; i < len(nums); i++ {
        if nums[i] > nums[i-1] {
            curLength++
            if curLength > maxLength {
                maxLength = curLength
            }
        } else {
            curLength = 1
        }
    }
    return maxLength
}


执行结果: 通过 显示详情 查看示例代码 添加备注

执行用时: 8 ms , 在所有 Go 提交中击败了 61.52% 的用户 内存消耗: 4.1 MB , 在所有 Go 提交中击败了 69.89% 的用户 通过测试用例: 35 / 35 炫耀一下:

分类:

后端

标签:

后端

作者介绍

j
jaryue
V1