博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程题—leetcode300:最长上升子序列
阅读量:2440 次
发布时间:2019-05-10

本文共 1101 字,大约阅读时间需要 3 分钟。

题目描述
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-increasing-subsequence著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目分析—动态规划(o(n^2))

1、用数组dp[i]表示以nums[i]结尾的最长上升子序列的长度

2、计算dp[i]的时候需要遍历dp[0]到dp[i-1]
3、选出其中dp[i]最大的如dp[j]并且还要满足nums[i]>nums[j]
4、dp[i]=dp[j]+1
5、否则,dp[i]=1;

通过代码
class Solution {
public int lengthOfLIS(int[] nums) {
if (nums.length==0) return 0; int[] dp = new int[nums.length]; int res=1; dp[0]=1; for(int i=1;i
=0;j--){
if (nums[i]>nums[j]){
flag=Math.max(dp[j],flag); } } dp[i]=flag+1; res=Math.max(res,dp[i]); } return res; }}
动态规划+二分查找(o(nlogn))

通过代码
class Solution {
public int lengthOfLIS(int[] nums) {
int len = nums.length; int[] flag=new int[len]; int res=0; for(int i=0;i
你可能感兴趣的文章
精益开发原则_了解精益发展的核心原则
查看>>
python speech_使用Google Speech API进行Python语音识别
查看>>
语法检查器_最佳免费语法和标点检查器为您提供帮助
查看>>
最佳日志实践_了解事件和日志管理最佳实践
查看>>
业务比技术更重要_如何吸引更多客户参与您的设计业务
查看>>
平面设计师和ui设计师_平面设计师的10条意外职业道路
查看>>
如何构建一个电子商务应用程序来赢得客户
查看>>
学习Python的最佳方法
查看>>
程序员用学位证吗_如何成为没有学位的程序员?
查看>>
雷莫修复PSD评论
查看>>
Wondershare Video Converter Ultimate评测
查看>>
web应用程序服务器_Web服务器和应用程序服务器之间的区别
查看>>
Wondershare DVD Creator评论
查看>>
程序员编程培训_每个程序员都必须知道的5条编程原则
查看>>
ux设计_为您的企业网站制作最佳UX设计的3条技巧
查看>>
前端和后端之间的区别
查看>>
构造函数与析构函数之间的区别
查看>>
去过印度的人评价印度_印度5个最佳自由职业网站
查看>>
使用字典的Python HashMap实现
查看>>
Wikipedia API Python教程
查看>>