程序员面试金典——叠罗汉1_____dp经典案例s
题目描述
叠罗汉是一个著名的游戏,游戏中一个人要站在另一个人的肩膀上。同时我们应该让下面的人比上面的人更高一点。已知参加游戏的每个人的身高,请编写代码计算通过选择参与游戏的人,我们多能叠多少个人。注意这里的人都是先后到的,意味着参加游戏的人的先后顺序与原序列中的顺序应该一致。
给定一个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相关推荐
- 【动态规划】程序员面试金典——11.7叠罗汉I
程序员面试金典--11.7叠罗汉I 首先我来批判一下这个题目出的真是不咋滴,后来的人按理说应该在上面.但此题的意思是求最长递增子序列,即后来的人在下面,完全是为了出题而出题... 参考博客: [1]h ...
- 程序员面试金典 - 面试题 17.08. 马戏团人塔(最长上升子序 DP/二分查找)
文章目录 1. 题目 2. 解题 2.1 超时解 2.2 二分查找 1. 题目 有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上.出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一 ...
- 《程序员面试金典》+《算法导论》
<程序员面试金典>+<算法导论> 因为最近可能会面临一波面试,但是自己各种算法以及常见的问题的熟悉程度感觉还不够,但是由前几次的代码优化经验来看,算法优化可以说是代码优化的重中 ...
- 程序员面试金典——18.4 2的个数
程序员面试金典--18.4 2的个数 Solution1:经典通法,得牢记啊... 此题在<剑指offer>中出现过,里面分析的比较到位 https://blog.csdn.net/all ...
- 程序员面试金典——1.1确定字符互异
程序员面试金典--1.1确定字符互异 2018年4月7日从今天开始正式看<程序员面试金典> Solution1: 之前一直以为的这类题比较好的一种方法,但貌似还是不太符合题目要求的&quo ...
- 程序员面试金典 - 面试题 10.03. 搜索旋转数组
题目难度: 中等 原题链接 今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 搜索旋转数组.给定一个排序后的数组 ...
- 程序员面试金典 - 面试题 17.07. 婴儿名字
题目难度: 中等 原题链接 今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 每年,政府都会公布一万个最常见的婴 ...
- 程序员面试金典(第 6 版)(简单篇)
程序员面试金典 第6版 简单篇 简单篇 面试题 01.01. 判定字符是否唯一 面试题 01.02. 判定是否互为字符重排 面试题 01.03. URL化 面试题 01.04. 回文排列 面试题 01 ...
- 程序员面试金典1.1
程序员面试金典1.1 重新用java刷一遍,熟悉java语言 文章目录 程序员面试金典1.1 1. 二次遍历 2.哈希表Map 3.利用set的不可重复性 4.用数组 5.位运算 6.用String自 ...
最新文章
- 危险进程大集合咯!(吐血推荐)
- 北京那些年轻人的秘密,都藏在这篇文章里
- 【前端3】jquary:页面加载,选择器,隔行换色,Dom,全选,动画,遍历,广告/抽奖,表单校验插件
- python中使用pickle进行序列化
- HtmlAgilityPack的简单使用
- Echarts实现隐藏x轴,y轴,刻度线,网格
- 段错误产生原因及简单的调试方法
- jenkins部署_Jenkins:部署JEE工件
- 图文详解mina框架
- 冯诺依曼体系结构及三级缓存
- WordPress文章/页面浏览量计数器插件Post Views Counter
- Python Opencv 简单视频裁剪功能的实现
- 照着这本“书”,3年量产自动驾驶卡车
- 买不起MacBook,使用Windows 10配置zsh命令行做开发
- rasp 系统_RASP技术分析
- 【opencv】动态背景下运动目标检测 SURF配准差分
- windows: 如何显示文件的全称
- IOS 之FishHook原理及例子
- ‘SHIT’上最全有限状态机设计研究(一)-状态机介绍
- Mac系统快速上手教学