CSDN 编程竞赛六十二期题解
发布人:shili8
发布时间:2024-11-19 00:44
阅读次数:0
**CSDN 编程竞赛六十二期题解**
本期的竞赛题目是 "最长上升子序列",要求我们找出一个给定整数数组中,最长的连续上升子序列。
### 题目描述给定一个整数数组 `nums`,请返回其中最长的连续上升子序列的长度。
**示例1:**
输入:`nums = [10,9,2,5,3,7,101,18]`
输出:`4`
解释:最长的连续上升子序列是 `[2,5,7,101]`,它的长度为 `4`。
**示例2:**
输入:`nums = [4,10,4,3,8,9]`
输出:`3`
解释:最长的连续上升子序列是 `[1,17,18]`,它的长度为 `3`。
### 解决方案我们可以使用动态规划来解决这个问题。首先,我们需要定义一个变量 `dp` 来存储每个元素对应的最长上升子序列长度。
def longest_ascending_sequence(nums): if not nums: return0 dp = [1] * len(nums) for i in range(1, len(nums)): for j in range(i): if nums[i] > nums[j]: dp[i] = max(dp[i], dp[j] +1) return max(dp)
###代码注释* `if not nums: return0`: 如果输入数组为空,则返回长度为0 的最长上升子序列。
* `dp = [1] * len(nums)`: 初始化一个长度为 `len(nums)` 的列表,所有元素均为1。这个列表将存储每个元素对应的最长上升子序列长度。
* `for i in range(1, len(nums)):`: 遍历数组中的每个元素(从第二个元素开始)。
* `for j in range(i):`:对于当前元素,遍历其左边所有元素。
* `if nums[i] > nums[j]: dp[i] = max(dp[i], dp[j] +1)`: 如果当前元素大于某个左边元素,则更新当前元素对应的最长上升子序列长度为该左边元素对应的长度加1。
* `return max(dp)`: 最后,返回列表中最大值,即最长的连续上升子序列的长度。
### 测试用例
print(longest_ascending_sequence([10,9,2,5,3,7,101,18])) # Output:4print(longest_ascending_sequence([4,10,4,3,8,9])) # Output:3
### 总结本题解展示了如何使用动态规划解决 "最长上升子序列" 的问题。通过遍历数组中的每个元素,并更新其对应的最长上升子序列长度,我们可以找到最长的连续上升子序列并返回其长度。