- 题目描述
- 解题思路
- 执行结果
题目描述
-
最长连续递增序列
给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。
连续递增的子序列 可以由两个下标 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
指针
申请一个指针
-
首先判断给定的数组是否为空,如果是则直接返回0,否则开始遍历数组。用变量maxLength记录最长连续递增子序列的长度,用变量curLength记录当前连续递增子序列的长度,初始化curLength为1,因为任何单个元素都是连续递增子序列。
遍历数组时,若当前元素大于前一个元素,则将curLength加1,否则将curLength重置为1,表示从当前元素开始重新计算连续递增子序列的长度。如果curLength大于maxLength,则更新maxLength的值。
最后返回maxLength的值即可。
-
(i作为递增数量的判断位置)
判断数据是否递增:i-1位置的数值小于i位置为递增
循环遍历数组直到遍历完整个数组返回最长的递增长度.
-
时间复杂度(O(n)) -
空间复杂度(O(1))
执行结果
法1
func findLengthOfLCIS(nums []int) int {
if len(nums) == 0 {
return 0
}
maxLength, curLength := 1, 1//分别储存最大的长度与当前的长度
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 炫耀一下:
本文由 mdnice 多平台发布