leetcode最长递增子序列问题
题目描写叙述:
给定一个数组,删除最少的元素,保证剩下的元素是递增有序的。
分析:
题目的意思是删除最少的元素。保证剩下的元素是递增有序的,事实上换一种方式想,就是寻找最长的递增有序序列。解法有非常多种,这里考虑用动态规划实现。
开辟一个额外的一维数组dp[]用来记录以每一个元素为结尾的最长子序列的长度。当然。还须要一个哈希表,用来保存最长子序列的元素。dp[i]表示以数组A[i]为结尾的最长子序列的长度。则不难得到例如以下的公式:
然后通过回溯哈希表把须要删除的元素删除就可以。
<span style="color:#000000;background-color: rgb(204, 204, 204);">public class Solution {ArrayList<Integer> minDelete(int A[]){ArrayList<Integer> res=new ArrayList<Integer>();HashMap<Integer, Integer> hash =new HashMap<Integer, Integer>();int dp[]=new int[A.length];//dp[i]记录以A[i]为结尾的最长递增子序列长度int count=0;int end=0;//最长递增子序列的最后一个元素for(int i=0;i<A.length;i++){dp[i]=1;for(int j=0;j<i;j++){if(A[i]>=A[j]){dp[i]=Math.max(dp[i], dp[j]+1);if(count<dp[i]){count=dp[i];hash.put(i, j);end=i;}}}}int k=A.length-1;while(k>=0){while(k>end){//增加须要被删除的元素res.add(A[k]);k--;}k--;if(hash.containsKey(end)){end=hash.get(end);}elseend=-1;}return res;}
}</span>
Google了一下最长递增子序列,发现了一篇非常棒的博客,写得非常具体。
http://blog.csdn.net/joylnwang/article/details/6766317
并且该博客还给出了更加优化的解法,太棒了,这里mark一下。
leetcode最长递增子序列问题相关推荐
- Leetcode——最长递增子序列(leetcode 300)
题目选择Leetcode 300 最长递增子序列 动态规划的典型例题,最长递增子序列 解题代码:C++ class Solution { public:int lengthOfLIS(vector&l ...
- Leetcode 300-最长递增子序列
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度. 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序.例如,[3,6,2,7] 是数组 [0,3,1,6, ...
- LeetCode 673. 最长递增子序列的个数(DP)
1. 题目 给定一个未排序的整数数组,找到最长递增子序列的个数. 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, ...
- 动态规划应用--最长递增子序列 LeetCode 300
文章目录 1. 问题描述 2. 解题思路 2.1 动态规划 2.2 二分查找 1. 问题描述 有一个数字序列包含n个不同的数字,如何求出这个序列中的最长递增子序列长度?比如2,9,3,6,5,1,7这 ...
- leetcode - 673. 最长递增子序列的个数
给定一个未排序的整数数组,找到最长递增子序列的个数. 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7] ...
- Leetcode动态规划:300.longest-increasing-subsequence(最长递增子序列)
300. 最长递增子序列 最近一直在攻克动态规划的题,Leetcode的简单题已经刷完,现在冲中等题,这道题算是一个比较经典的题吧,独立完成,虽然花了两个多小时,但收获很多: 思路:动态规划首先要找到 ...
- leetcode(300)—— Longest Increasing Subsequence(最长递增子序列)
参考 Python 解法: 动态规划 -- 最长递增子序列(LIS) 原题位置:Longest Increasing Subsequence | LeetCode OJ 题目的说明: 严格递增: 子序 ...
- LeetCode高频题300. 最长递增子序列
LeetCode高频题300. 最长递增子序列 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目 互联网大厂们在公司养了一大批A ...
- 【Leetcode】最长递增子序列问题及应用
文章目录 最长递增子序列问题及应用 300. 最长递增子序列 面试题 17.08. 马戏团人塔 354. 俄罗斯套娃信封问题 面试题 08.13. 堆箱子 1691. 堆叠长方体的最大高度 406. ...
最新文章
- GPT-3说:马斯克是世界最强的人,但没有他人类会更好
- matlab中ismember_MATLAB 代码格式化简易版
- 【常用】加载配置文件管理资源路径
- mysql安装./depcomp_编译安装mysql及问题汇总
- Java 11 升级:“债务”“危机”
- 简单说 CSS滤镜 filter属性
- 数字臧品系统开发运行逻辑数字臧品系统开发源码搭建流程
- 计算机屏保后无法再次启动,电脑开机一直停留在屏保 电脑问题的原因以及解决方法...
- [论]【MGT】Meta Graph Transformer: A Novel Framework for Spatial–Temporal Traffic Prediction
- 网络冗余计算机,基于冗余计算机的冗余网络IP智能切换方法及系统与流程
- 什么是BLOB URL,为什么要使用它?
- python高频词汇表大全_利用python统计word文档高频词汇
- 微信公众平台测试号推送思路
- 搭建一个用于工作和学习的Linux桌面环境的尝试
- 元引擎视频制作工具 一键生成原创视频软件
- 高精度除法(高精度除以高精度)
- sql Mirroring
- mysql绑定多个ip地址
- matlab pi表示,matlab中pi是什么意思
- oracle数据库字符集子集与超集对应关系表表