0674最长连续递增子序列 Marathon

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

连续递增的子序列 可以由两个下标 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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence

参考:

python

# 0674.最长递增子序列

class Solution:
    def findLengthOfCIS(self, nums: [int]) -> int:
        """
        动态规划,最长连续递增子序列
        1.确定dp及下标:
        - dp[i], 下标为i结尾的数组的连续递增的子序列长度为dp[i]
        2.递推公式:
        - nums[i+1] > nums[i], dp[i+1] = dp[i] + 1
        3.初始化:
        - dp[i]=1
        4.遍历顺序:
        - 从前向后
        :param nums:
        :return:
        """
        if len(nums) == 0: return 0
        res = 1
        dp = [1] * len(nums)
        for i in range(0, len(nums)-1):
            if nums[i+1] > nums[i]:
                dp[i+1] = dp[i] + 1
            res = max(res, dp[i+1])
        return res

    def findLengthOfCIS_(self, nums: [int]) -> int:
        """
        贪心算法
        :param nums:
        :return:
        """
        if len(nums) == 0: return 0
        res = 1
        count = 1
        for i in range(len(nums)-1):
            if nums[i+1] > nums[i]:
                count += 1
            else:
                count = 1
            res = max(res, count)
        return res

golang

package dynamicPrograming

// 贪心算法
func findLengthOfCIS_(nums []int) int {
	if len(nums) == 0 {return 0}
	var res, count int
	res, count = 1, 1
	for i:=0;i<len(nums)-1;i++ {
		if nums[i+1] > nums[i] {
			count++
		} else {
			count = 1
		}
		res = max(res, count)
	}
	return res
}

// 动态规划
func findLengthOfCIL(nums []int) int {
	if len(nums) == 0 {return 0}
	var res int = 1
	dp := make([]int, len(nums))
	for i:=0;i<len(nums);i++ {
		dp[i] = 1
	}
	for i:=0;i<len(nums)-1;i++ {
		if nums[i+1] > nums[i] {
			dp[i+1] = dp[i] + 1
		}
		res = max(res, dp[i+1])
	}
	return res
}

func max(a, b int) int {
	if a > b {return a}
	return b
}

原文地址:https://www.cnblogs.com/davis12/p/15644048.html