题目描述

叠罗汉是一个著名的游戏,游戏中一个人要站在另一个人的肩膀上。同时我们应该让下面的人比上面的人更高一点。已知参加游戏的每个人的身高,请编写代码计算通过选择参与游戏的人,我们多能叠多少个人。注意这里的人都是先后到的,意味着参加游戏的人的先后顺序与原序列中的顺序应该一致。

给定一个int数组men,代表依次来的每个人的身高。同时给定总人数n,请返回最多能叠的人数。保证n小于等于500。

测试样例:
[1,6,2,5,3,4],6

返回:4

思路:

第二种算法:动态规划法

设f(i)表示L中以ai为末元素的最长递增子序列的长度。则有如下的递推方程:

这个递推方程的意思是,在求以ai为末元素的最长递增子序列时,找到所有序号在L前面且小于ai的元素aj,即j<i且aj<ai。如果这样的元素存在,那么对所有aj,都有一个以aj为末元素的最长递增子序列的长度f(j),把其中最大的f(j)选出来,那么f(i)就等于最大的f(j)加上1,即以ai为末元素的最长递增子序列,等于以使f(j)最大的那个aj为末元素的递增子序列最末再加上ai;如果这样的元素不存在,那么ai自身构成一个长度为1的以ai为末元素的递增子序列。

这里少了sort。不全。

首先生成dp[n]的数组,dp[i]表示以必须arr[i]这个数结束的情况下产生的最大递增子序列的长度。对于第一个数来说,很明显dp[0]为1,当我们计算dp[i]的时候,我们去考察i位置之前的所有位置,找到i位置之前的最大的dp值,记为dp[j](0=<j<i),dp[j]代表以arr[j]结尾的最长递增序列,而dp[j]又是之前计算过的最大的那个值,我们在来判断arr[i]是否大于arr[j],如果大于dp[i]=dp[j]+1.计算完dp之后,我们找出dp中的最大值,即为这个串的最长递增序列。

import java.util.*;public class Stack {public int getHeight(int[] men, int n) {// write code hereif(n==0)return 0;int dp [] =new int[n];dp[0]=1;for(int i=1;i<n;i++){dp[i]=1;//dp[i]的最小值为1for(int j=0;j<i;j++){if(men[i]>men[j]&&dp[j]>dp[i]-1){dp[i]=dp[j]+1;}}//for j}//for iArrays.sort(dp);//找到最后一个更新的值得,即最大值。return dp[n-1];}
}

程序员面试金典——叠罗汉1_____dp经典案例s相关推荐

  1. 【动态规划】程序员面试金典——11.7叠罗汉I

    程序员面试金典--11.7叠罗汉I 首先我来批判一下这个题目出的真是不咋滴,后来的人按理说应该在上面.但此题的意思是求最长递增子序列,即后来的人在下面,完全是为了出题而出题... 参考博客: [1]h ...

  2. 程序员面试金典 - 面试题 17.08. 马戏团人塔(最长上升子序 DP/二分查找)

    文章目录 1. 题目 2. 解题 2.1 超时解 2.2 二分查找 1. 题目 有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上.出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一 ...

  3. 《程序员面试金典》+《算法导论》

    <程序员面试金典>+<算法导论> 因为最近可能会面临一波面试,但是自己各种算法以及常见的问题的熟悉程度感觉还不够,但是由前几次的代码优化经验来看,算法优化可以说是代码优化的重中 ...

  4. 程序员面试金典——18.4 2的个数

    程序员面试金典--18.4 2的个数 Solution1:经典通法,得牢记啊... 此题在<剑指offer>中出现过,里面分析的比较到位 https://blog.csdn.net/all ...

  5. 程序员面试金典——1.1确定字符互异

    程序员面试金典--1.1确定字符互异 2018年4月7日从今天开始正式看<程序员面试金典> Solution1: 之前一直以为的这类题比较好的一种方法,但貌似还是不太符合题目要求的&quo ...

  6. 程序员面试金典 - 面试题 10.03. 搜索旋转数组

    题目难度: 中等 原题链接 今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 搜索旋转数组.给定一个排序后的数组 ...

  7. 程序员面试金典 - 面试题 17.07. 婴儿名字

    题目难度: 中等 原题链接 今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 每年,政府都会公布一万个最常见的婴 ...

  8. 程序员面试金典(第 6 版)(简单篇)

    程序员面试金典 第6版 简单篇 简单篇 面试题 01.01. 判定字符是否唯一 面试题 01.02. 判定是否互为字符重排 面试题 01.03. URL化 面试题 01.04. 回文排列 面试题 01 ...

  9. 程序员面试金典1.1

    程序员面试金典1.1 重新用java刷一遍,熟悉java语言 文章目录 程序员面试金典1.1 1. 二次遍历 2.哈希表Map 3.利用set的不可重复性 4.用数组 5.位运算 6.用String自 ...

最新文章

  1. 危险进程大集合咯!(吐血推荐)
  2. 北京那些年轻人的秘密,都藏在这篇文章里
  3. 【前端3】jquary:页面加载,选择器,隔行换色,Dom,全选,动画,遍历,广告/抽奖,表单校验插件
  4. python中使用pickle进行序列化
  5. HtmlAgilityPack的简单使用
  6. Echarts实现隐藏x轴,y轴,刻度线,网格
  7. 段错误产生原因及简单的调试方法
  8. jenkins部署_Jenkins:部署JEE工件
  9. 图文详解mina框架
  10. 冯诺依曼体系结构及三级缓存
  11. WordPress文章/页面浏览量计数器插件Post Views Counter
  12. Python Opencv 简单视频裁剪功能的实现
  13. 照着这本“书”,3年量产自动驾驶卡车
  14. 买不起MacBook,使用Windows 10配置zsh命令行做开发
  15. rasp 系统_RASP技术分析
  16. 【opencv】动态背景下运动目标检测 SURF配准差分
  17. windows: 如何显示文件的全称
  18. IOS 之FishHook原理及例子
  19. ‘SHIT’上最全有限状态机设计研究(一)-状态机介绍
  20. Mac系统快速上手教学

热门文章

  1. python面试大全 萧井陌_Python就该这么学?!
  2. 浙政钉2.0-应用监控(埋点)完整分析 及 成功实现埋点
  3. 空时二维自适应处理-相控阵雷达二维杂波谱分布仿真Matlab
  4. 技术管理实战学习笔记(二)
  5. 研发管理-项目内部立项流程
  6. VREP Remote API工作模式详解(未写完,完成度90%)
  7. 黑马全套Java教程(十一)
  8. 手机PCB设计基本要求
  9. Neural Network with Python(神经网络回归+结果可视化python代码)
  10. oppo三面面经,现已拿到offer。十月份我快乐了,你呢?