博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[leetcode]Longest Increasing Subsequence
阅读量:5809 次
发布时间:2019-06-18

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

Given an unsorted array of integers, find the length of longest increasing subsequence.

For example, Given [10, 9, 2, 5, 3, 7, 101, 18], The longest increasing subsequence is [2, 3, 7, 101], therefore the length is 4. Note that there may be more than one LIS combination, it is only necessary for you to return the length.

Your algorithm should run in O(n^2) complexity.


对于一个递增子序列,想要增加它的长度,就必须在尾部添加一个更大的值。

O(n^2)
dp[i]表示以nums[i]结尾的最长递增序列的长度。长度增加的条件就是一个数字比nums[i]大。

public int lengthOfLIS(int[] nums) {        int N = nums.length;        if (N == 0) return 0;        int[] dp = new int[N];        Arrays.fill(dp, 1);        int res = 1;        for (int i = 1; i < N; i++) {            for (int j = 0; j < i; j++) {                if (nums[j] < nums[i]) {                    dp[i] = Math.max(dp[j] + 1, dp[i]);                }            }            res = Math.max(res, dp[i]);        }        return res;    }

O(nlogn)

长度最大值即为输入数组的长度。用dp[i]表示,长度为i时,结尾的数字。可以不断更新。这里可以用binarySearch来查询需要插放的位置。
Java自带的binarySearch,如果有该元素则返回正确的index,如果没有返回-(index+1),是一个负数,我们需要替换成正确的数值。

public class Solution {    public int lengthOfLIS(int[] nums) {                    int[] dp = new int[nums.length];        int len = 0;        for(int x : nums) {            int i = Arrays.binarySearch(dp, 0, len, x);            if(i < 0) i = -(i + 1);            dp[i] = x;            if(i == len) len++;        }        return len;    }}

转载地址:http://bhjbx.baihongyu.com/

你可能感兴趣的文章
MYSQL数据库间同步数据
查看>>
DevOps 前世今生 | mPaaS 线上直播 CodeHub #1 回顾
查看>>
iOS 解决UITabelView刷新闪动
查看>>
让前端小姐姐愉快地开发表单
查看>>
Dubbo笔记(四)
查看>>
Web前端JQuery入门实战案例
查看>>
java B2B2C Springboot电子商城系统- SSO单点登录之OAuth2.0 登出流程(3)
查看>>
12月26日云栖精选夜读:CDN新品发布:阿里云SCDN安全加速开放公测
查看>>
USB 通信原理
查看>>
7zZip zip RAR iOS
查看>>
date命令的详细用法!
查看>>
分布式存储ceph集群部署
查看>>
UiAutomator源码分析之UiAutomatorBridge框架
查看>>
python 开发之selenium
查看>>
Xcode3.2.5中找不到Mac OS X - Command Line Utility -...
查看>>
css的div垂直居中的方法,百分比div垂直居中
查看>>
如何理解EM算法
查看>>
nginx 域名跳转一例~~~(rewrite、proxy)
查看>>
linux用户家目录无损迁移到独立硬盘
查看>>
文件查找
查看>>