【每日一题】最长上升子序列

it2023-09-25  67

题目描述 给定一个无序的整数数组,找到其中最长上升子序列的长度。

示例 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。

思路 动态规划+二分查找 实现O(nlogn)的时间复杂度

代码

class Solution { public int lengthOfLIS(int[] nums) { int n = nums.length; int[] dp = new int[n]; //最长上升子序列为2, 3, 7, 18 //len++ int len = 0; for(int num : nums){ int index = Arrays.binarySearch(dp, 0, len, num); //二分查找未找到时返回的下标为-(low+1) //实际插入位置:pos = -(index + 1) if(index < 0){ index = -(index + 1); } dp[index] = num; if(index == len){ len++; } } return len; } }
最新回复(0)