zoukankan      html  css  js  c++  java
  • 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
    }
    
    
  • 相关阅读:
    java 重定向和转发的区别
    Python练习100则--部分概念的没有做
    MYSQL忘记root密码后如何修改
    二分查找注意点
    数据库连接串整理
    MYSQL mysqldump数据导出详解
    MVCC的一些理解
    MySQL 加锁处理分析-转载
    扩展1
    maven-windows使用
  • 原文地址:https://www.cnblogs.com/davis12/p/15644048.html
Copyright © 2011-2022 走看看