首页 > 试题广场 >

最长上升子序列(一)

[编程题]最长上升子序列(一)
  • 热度指数:78053 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个长度为 n 的数组 arr,求它的最长严格上升子序列的长度。
所谓子序列,指一个数组删掉一些数(也可以不删)之后,形成的新数组。例如 [1,5,3,7,3] 数组,其子序列有:[1,3,3]、[7] 等。但 [1,6]、[1,3,5] 则不是它的子序列。
我们定义一个序列是 严格上升 的,当且仅当该序列不存在两个下标 ij 满足
数据范围:
要求:时间复杂度 O(nlogn), 空间复杂度 O(n)
示例1

输入

[6,3,1,5,2,3,7]

输出

4

说明

该数组最长上升子序列为 [1,2,3,7] ,长度为4
头像 牛客题解官
发表于 2022-04-22 12:46:14
精华题解 题目主要信息: 给定一个数组,求其中最长的严格上升子序列的长度 子序列是指数组去掉或不去掉元素后的数组,不要求在原本数组中全部相邻,但是在原数组中的相对位置不能改变 严格上升指子序列严格单调递增 举一反三: 学习完本题的思路你可以解决如下题目: BM65 最长公共子序列(二) BM66.最长公共 展开全文
头像 xqxls
发表于 2022-02-16 21:43:02
题意整理 给定一个长度为n的数组。 求它的最长上升子序列的长度。子序列是指按原来数组顺序取的若干个数字组成的序列,上升子序列是指序列中元素严格单调递增。 方法一(动态规划) 1.解题思路 状态定义:dp[i]dp[i]dp[i]表示以下标i结尾的最长上升子序列的长度。 状态初始化:以任意下标结 展开全文
头像 牛客313925129号
发表于 2022-02-17 12:34:13
题意理解 在一个数组arr中,我们可以从前往后按照顺序选择一些数字,构成一个子序列a。要求子序列从前往后是严格递增的,即对于任意i<ji<ji<j,必须满足a[i]<a[j]a[i]<a[j]a[i]<a[j]。现在我们要找出所有这样的子序列中,最长长度为多少。 展开全文
头像 fred-coder
发表于 2021-11-23 01:08:21
dp 解法,定义 dp 数组,转移方程为 dp[i] = max(dp[i], dp[j] + 1) j < i and arr[j] < arr[i] 因为每个数字算一位,初始值 dp = [1] * len(arr) 代码如下 # # 代码中的类名、方法名、参数名已经指定,请勿修改, 展开全文
头像 一朵清新的云
发表于 2022-03-24 13:48:10
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 给定数组的最长严格上升子序列的长度。 * @param arr i 展开全文
头像 勇敢牛牛生活灿烂
发表于 2022-05-05 10:46:44
class Solution: def LIS(self , arr: List[int]) -> int: # write code here # dp[i]表示包含底i个元素的最大上升子序列的长度 if not arr: 展开全文
头像 总之就是非常可爱
发表于 2022-04-13 21:30:10
import java.util.*; public class Solution {     /**      * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可      *   展开全文
头像 菜鸡孙连城
发表于 2022-03-25 16:28:11
状态转移方程 dp[i]=Math.max(dp[i],dp[j]+1)dp[i] = Math.max(dp[i],dp[j]+1)dp[i]=Math.max(dp[i],dp[j]+1) 条件:j<i且arr[j]<arr[i]j<i且arr[j]<arr[i]j< 展开全文
头像 胡龙翔
发表于 2023-04-14 00:00:45
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 给定数组的最长严格上升子序列的长度。 * @param arr int整型一维数组 给定的数组 * @param arrLen int arr数组长度 * @return int整型 */ 展开全文
头像 夕木月
发表于 2022-07-29 19:46:19
int max(int a,int b) {     if(a > b)         return a;     return b; } int LIS(int* arr, int arrLen )  展开全文
头像 某知名患者
发表于 2022-03-18 23:48:24
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 给定数组的最长严格上升子序列的长度。 * @param arr int整型一维数组 给定的数组 * @return int整型 */ function LIS(arr) { // write 展开全文