题目描写叙述:

给定一个数组,删除最少的元素,保证剩下的元素是递增有序的。

分析:

题目的意思是删除最少的元素。保证剩下的元素是递增有序的,事实上换一种方式想,就是寻找最长的递增有序序列。解法有非常多种,这里考虑用动态规划实现。

开辟一个额外的一维数组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最长递增子序列问题相关推荐

  1. Leetcode——最长递增子序列(leetcode 300)

    题目选择Leetcode 300 最长递增子序列 动态规划的典型例题,最长递增子序列 解题代码:C++ class Solution { public:int lengthOfLIS(vector&l ...

  2. Leetcode 300-最长递增子序列

    给你一个整数数组 nums ,找到其中最长严格递增子序列的长度. 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序.例如,[3,6,2,7] 是数组 [0,3,1,6, ...

  3. LeetCode 673. 最长递增子序列的个数(DP)

    1. 题目 给定一个未排序的整数数组,找到最长递增子序列的个数. 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, ...

  4. 动态规划应用--最长递增子序列 LeetCode 300

    文章目录 1. 问题描述 2. 解题思路 2.1 动态规划 2.2 二分查找 1. 问题描述 有一个数字序列包含n个不同的数字,如何求出这个序列中的最长递增子序列长度?比如2,9,3,6,5,1,7这 ...

  5. leetcode - 673. 最长递增子序列的个数

    给定一个未排序的整数数组,找到最长递增子序列的个数. 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7] ...

  6. Leetcode动态规划:300.longest-increasing-subsequence(最长递增子序列)

    300. 最长递增子序列 最近一直在攻克动态规划的题,Leetcode的简单题已经刷完,现在冲中等题,这道题算是一个比较经典的题吧,独立完成,虽然花了两个多小时,但收获很多: 思路:动态规划首先要找到 ...

  7. leetcode(300)—— Longest Increasing Subsequence(最长递增子序列)

    参考 Python 解法: 动态规划 -- 最长递增子序列(LIS) 原题位置:Longest Increasing Subsequence | LeetCode OJ 题目的说明: 严格递增: 子序 ...

  8. LeetCode高频题300. 最长递增子序列

    LeetCode高频题300. 最长递增子序列 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目 互联网大厂们在公司养了一大批A ...

  9. 【Leetcode】最长递增子序列问题及应用

    文章目录 最长递增子序列问题及应用 300. 最长递增子序列 面试题 17.08. 马戏团人塔 354. 俄罗斯套娃信封问题 面试题 08.13. 堆箱子 1691. 堆叠长方体的最大高度 406. ...

最新文章

  1. GPT-3说:马斯克是世界最强的人,但没有他人类会更好
  2. matlab中ismember_MATLAB 代码格式化简易版
  3. 【常用】加载配置文件管理资源路径
  4. mysql安装./depcomp_编译安装mysql及问题汇总
  5. Java 11 升级:“债务”“危机”
  6. 简单说 CSS滤镜 filter属性
  7. 数字臧品系统开发运行逻辑数字臧品系统开发源码搭建流程
  8. 计算机屏保后无法再次启动,电脑开机一直停留在屏保 电脑问题的原因以及解决方法...
  9. [论]【MGT】Meta Graph Transformer: A Novel Framework for Spatial–Temporal Traffic Prediction
  10. 网络冗余计算机,基于冗余计算机的冗余网络IP智能切换方法及系统与流程
  11. 什么是BLOB URL,为什么要使用它?
  12. python高频词汇表大全_利用python统计word文档高频词汇
  13. 微信公众平台测试号推送思路
  14. 搭建一个用于工作和学习的Linux桌面环境的尝试
  15. 元引擎视频制作工具 一键生成原创视频软件
  16. 高精度除法(高精度除以高精度)
  17. sql Mirroring
  18. mysql绑定多个ip地址
  19. matlab pi表示,matlab中pi是什么意思
  20. oracle数据库字符集子集与超集对应关系表表

热门文章

  1. VS2005 解决应用程序配置不正确,程序无法启动问题(小问题,大思想)
  2. cmos图像传感器应用实例及其发展趋势分析
  3. 7-46 银行排队问题之单队列多窗口服务 (10 分)
  4. 7-201 列出连通集 (25 分)
  5. 使用 Proteus 仿真 STM32
  6. jQuery实现Ajax应用
  7. 《九章算术》中更相减损术----求最大公约数
  8. c 读取url中的html文本,如何使用Guzzlehttp获取给定url的html内容
  9. 活动目录管理中常用的脚本(一)
  10. HDU 4747 Mex【线段树上二分+扫描线】