最长连续递增序列
字数 1082 2025-11-16 12:49:44

最长连续递增序列

题目描述:
给定一个无序的整数数组nums,请找出其中最长的连续递增子序列的长度。连续递增子序列是指从原数组中选取连续的一段,且这段元素严格递增(每个元素都比前一个元素大)。

解题过程:

  1. 问题分析:
  • 我们需要找到数组中连续的一段,这段元素是严格递增的
  • 子序列必须是连续的,不能跳过任何元素
  • 要求返回最长这样的连续子序列的长度
  1. 状态定义:
    定义dp[i]表示以第i个元素结尾的最长连续递增子序列的长度。

  2. 状态转移方程:

  • 如果nums[i] > nums[i-1],说明当前元素可以接在以i-1结尾的连续递增子序列后面,形成更长的连续递增子序列:
    dp[i] = dp[i-1] + 1
  • 如果nums[i] <= nums[i-1],说明连续性被打破,需要重新开始计数:
    dp[i] = 1
  1. 初始条件:
    dp[0] = 1(第一个元素自身就是一个长度为1的连续递增子序列)

  2. 算法步骤:

  • 初始化dp数组,长度为n(数组长度),dp[0] = 1
  • 初始化max_len = 1(记录全局最大值)
  • 从i=1到n-1遍历数组:
    • 如果nums[i] > nums[i-1]:dp[i] = dp[i-1] + 1
    • 否则:dp[i] = 1
    • 更新max_len = max(max_len, dp[i])
  • 返回max_len
  1. 示例演示:
    对于数组nums = [1,3,5,4,7]:
  • i=0: dp[0] = 1, max_len = 1
  • i=1: nums[1]=3 > nums[0]=1 → dp[1] = dp[0]+1 = 2, max_len = 2
  • i=2: nums[2]=5 > nums[1]=3 → dp[2] = dp[1]+1 = 3, max_len = 3
  • i=3: nums[3]=4 ≤ nums[2]=5 → dp[3] = 1, max_len = 3
  • i=4: nums[4]=7 > nums[3]=4 → dp[4] = dp[3]+1 = 2, max_len = 3
    最终结果为3(对应子序列[1,3,5])
  1. 优化:
    实际上我们可以用单个变量代替dp数组,因为每个状态只依赖于前一个状态:
  • 用curr_len记录当前连续递增序列长度
  • 用max_len记录全局最大值
    这样空间复杂度可以从O(n)降到O(1)

这个解法的时间复杂度是O(n),空间复杂度是O(1)(优化后),是解决此类问题的最优解。

最长连续递增序列 题目描述: 给定一个无序的整数数组nums,请找出其中最长的连续递增子序列的长度。连续递增子序列是指从原数组中选取连续的一段,且这段元素严格递增(每个元素都比前一个元素大)。 解题过程: 问题分析: 我们需要找到数组中连续的一段,这段元素是严格递增的 子序列必须是连续的,不能跳过任何元素 要求返回最长这样的连续子序列的长度 状态定义: 定义dp[ i ]表示以第i个元素结尾的最长连续递增子序列的长度。 状态转移方程: 如果nums[ i] > nums[ i-1 ],说明当前元素可以接在以i-1结尾的连续递增子序列后面,形成更长的连续递增子序列: dp[ i] = dp[ i-1 ] + 1 如果nums[ i] <= nums[ i-1 ],说明连续性被打破,需要重新开始计数: dp[ i ] = 1 初始条件: dp[ 0 ] = 1(第一个元素自身就是一个长度为1的连续递增子序列) 算法步骤: 初始化dp数组,长度为n(数组长度),dp[ 0 ] = 1 初始化max_ len = 1(记录全局最大值) 从i=1到n-1遍历数组: 如果nums[ i] > nums[ i-1]:dp[ i] = dp[ i-1 ] + 1 否则:dp[ i ] = 1 更新max_ len = max(max_ len, dp[ i ]) 返回max_ len 示例演示: 对于数组nums = [ 1,3,5,4,7 ]: i=0: dp[ 0] = 1, max_ len = 1 i=1: nums[ 1]=3 > nums[ 0]=1 → dp[ 1] = dp[ 0]+1 = 2, max_ len = 2 i=2: nums[ 2]=5 > nums[ 1]=3 → dp[ 2] = dp[ 1]+1 = 3, max_ len = 3 i=3: nums[ 3]=4 ≤ nums[ 2]=5 → dp[ 3] = 1, max_ len = 3 i=4: nums[ 4]=7 > nums[ 3]=4 → dp[ 4] = dp[ 3]+1 = 2, max_ len = 3 最终结果为3(对应子序列[ 1,3,5 ]) 优化: 实际上我们可以用单个变量代替dp数组,因为每个状态只依赖于前一个状态: 用curr_ len记录当前连续递增序列长度 用max_ len记录全局最大值 这样空间复杂度可以从O(n)降到O(1) 这个解法的时间复杂度是O(n),空间复杂度是O(1)(优化后),是解决此类问题的最优解。