当前位置:实例文章 » 其他实例» [文章]LeetCode(字节 10 日完结)-0718

LeetCode(字节 10 日完结)-0718

发布人:shili8 发布时间:2025-01-31 09:18 阅读次数:0

**LeetCode(字节10 日完结)-0718**

### **前言**

本文是 LeetCode 的第71 天,主题为 "字节10 日完结"。在这篇文章中,我们将讨论如何解决一道经典的算法题目,并提供详细的代码示例和注释。

### **问题描述**

**0718. 最长连续子序列**

给定一个整数数组 `nums`,请找出其中最长连续子序列(LCS)的长度。子序列是指从原始序列中删除一些元素而不改变其相对顺序的序列。

示例1:

* 输入:`nums = [1,9,3,10,4,20,2]`
* 输出:`5`

示例2:

* 输入:`nums = [1,2,3,4,5,6,7,8,9]`
* 输出:`9`

### **解决方案**

我们可以使用动态规划来解决这个问题。具体来说,我们将维护一个长度为 `n` 的数组 `dp`,其中 `dp[i]` 表示从第0 个元素到第 `i` 个元素的最长连续子序列的长度。

class Solution:
 def longestContinuousSubsequence(self, nums: List[int]) -> int:
 n = len(nums)
 dp = [1] * n for i in range(1, n):
 if nums[i] - nums[i-1] ==1:
 dp[i] = dp[i-1] +1 return max(dp)


### **代码注释**

* 我们首先初始化一个长度为 `n` 的数组 `dp`,其中每个元素都等于1。这是因为每个数字都是自身的连续子序列。
* 然后,我们遍历从第1 个元素到第 `n-1` 个元素的所有数字。如果当前数字与前一个数字相差1,则我们更新 `dp[i]` 为 `dp[i-1] +1`。这意味着我们找到了一个长度为 `dp[i-1] +1` 的连续子序列。
* 最后,我们返回 `dp` 中的最大值,这代表了最长连续子序列的长度。

### **时间复杂度**

时间复杂度为 O(n),其中 n 是数组 `nums` 的长度。我们只遍历了一次数组,因此时间复杂度是线性的。

### **空间复杂度**

空间复杂度为 O(n),其中 n 是数组 `nums` 的长度。我们维护了一个长度为 n 的数组 `dp`,因此空间复杂度也是线性的。

### **总结**

在本文中,我们讨论了如何使用动态规划来解决 LeetCode 的第71 天题目 "字节10 日完结"。我们提供了详细的代码示例和注释,并分析了时间和空间复杂度。

其他信息

其他资源

Top