贪心算法爬楼梯问题--LeetCode746《Blind-Stab》
leetcode网第746号题:题目如下
数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始)。
每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。
您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/min-cost-climbing-stairs
这道题刚开始看得我有点懵逼,想了一会想出解法来了,下面我们就来分析一下!
分析:
1,题目的意思是求最小体力花费,给了你一个数组,数组里面的值不固定,但都是大于0的。
2,你每次可以走一个楼梯,或者两个楼梯,但是上楼梯要花费该楼梯对应的体力值,最终走完,求最小。
3,也就是说我们每次都选择最优路径走,最小值肯定唯一。
4,我们用以大化小法想,假设开始n个楼梯,也就是一个数组长度为n,最大值角标为n-1,我们放小这个n
5,假设只有两个楼梯,我们是不是直接找出里面最小的值就行了,一来就到那最小的楼梯上去,这就是最小花费。
6,每一个楼梯从他的上一步走到该楼梯都有两种走法,一种是连续两次走一个楼梯,一种是一下跨上去。
7,而我们要求的就是这两种可能中的最小花费,但是要求到达最顶层的最小花费,我们就得保证每一次都是最小的花费。
8,n个楼梯,第一次,我们能跨到0阶,或者1阶,那么0阶楼梯对应的cost[0]就是到0阶楼梯的最小花费,同理1阶。
9,那么角标为2的2阶楼梯呢,我们是不是可以从0阶或者1阶跨到2阶,所以就要求出当前0阶和1阶位置上哪个花费比较小
10,哪个花费比较小我就从哪个楼梯走,假设是0阶比1阶小,那我就是0-2这样的走法,那么当前走到2阶的方法就是最小花费。
11,同理角标为3的楼梯,他可以从1,或者2跨上去,当前1,2记录下了走到自身楼梯的最小发花费,是不是只要比较两者谁更小就可以了?假设1小,那么就是1-3,,,,依次类推得到n阶
12,也就是说,我需要一个容器来求出并记录每个角标对应的楼梯的最小花费,然后迭代。要到达目标楼梯n,那就要求出走到n-1,和n-2阶楼梯的最小花费,挑出更小的,也就是我们要求出每一个楼梯的最小花费。
13,记录容器[0] = cost[0], 记录容器[1]=cost[1], 记录容器[2] = min(记录容器[0],记录容器[1]) + cost[2] ,,,,, 记录容器[n] = min(记录容器[n-1],记录容器[n-2]) + cost[n].
14,但是因为n-1,和 n 的下一步都可以结束跨楼,所以我们最后还要min(记录容器[n - 1],记录容器[n-2]).得到的便是答案。
好,接下来我们来写程序!
public class LC746 {public static void main(String[] args) {//模拟楼梯每一阶对应的花费int [] cost = {0,2,2,1,0,1,2,2};//4 //用来记录到达相应下标值的楼梯的最小花费int [] indexMinCost = new int[cost.length];//0,1两个楼梯一来就可以直接跨上去,cost对应值既是最小值//不需要去和哪个楼梯比较大小,因此不进入循环直接赋值indexMinCost[0] = cost[0];indexMinCost[1] = cost[1];//从角标2开始计算每一个楼梯最小花费for (int i = 2; i < indexMinCost.length; i++) {//拿前两个楼梯中最小的加上当前要跨的,就是到当前要跨的这个楼梯的最小花费indexMinCost[i] = Math.min(indexMinCost[i-1], indexMinCost[i-2]) + cost[i];}//当前indexMinCost[]记录的是相应角标阶梯的最小花费//但是由于n-1和n-2的下一步都可以跨完,所以我们还得在比较一次int min = Math.min(indexMinCost[cost.length - 1], indexMinCost[cost.length - 2]);System.out.println("最小花费为:" + min);}
}
总结:
一开始我陷入了误区,认为每次都是两两相比求最小值,其实不是的,应该是求出每个角标对应阶梯的最小值。
解法还是很灵活的,凡是能用到for(1-n)的必然有规律,我们要去找到这根规律线。就这题来说,要求最小,你得每次都最小,那我们就去求每次都最小的,怎么求,我就从第一个开始。。。。
贪心算法爬楼梯问题--LeetCode746《Blind-Stab》相关推荐
- 经典算法——爬楼梯(解法归纳)(学习笔记)
问题分析 假设你正在爬楼梯.需要 n 阶你才能到达楼顶.每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢?是引用 当n=1时,只需爬一个台阶,就是一种解法. 当n=2时,可以走两次 ...
- Java算法——爬楼梯(LeetCode第70题)
问题描述 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 示例 分析 题目中给出,上台阶的方式只有两种,一种为一步跨一阶,一种为 ...
- 贪心算法---跳楼梯问题
1.题目 从A点到B点有n阶楼梯,小明现在要从A点到B点,他可以一步迈一个格子,也可以一步迈两个格子,也可以一步迈三个格子,也可以一步迈四个格子.请编写程序计算小明从A点到B点一共有多少种走法. 2. ...
- 【每日一算法】爬楼梯
微信改版,加星标不迷路! 每日一算法-爬楼梯 作者:阿广 阅读目录 ? 题目 ? 解析 ? 完整代码 1 题目 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多 ...
- 爬楼梯-斐波那契数列
每日算法---爬楼梯 题目: 假设你正在爬楼梯.需要 n 阶你才能到达楼顶.每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数.示例 1:输入: 2 输 ...
- 动态规划算法-01爬楼梯问题
爬楼梯问题 动态规划 动态规划算法将带求解问题拆分成一系列相互交叠的子问题,通过递推关系定义各子问题的求解策略,并随时记录子问题的解,最终获得原始问题的解,避免了对交叠子问题的重复求解. 在动态规划算 ...
- 斐波那契数列-爬楼梯算法
爬楼梯算法 有n级楼梯,有2种爬法,1次1级,或1次2级,问,n级楼梯有多少种爬法? 递归求解 首先,当只有一阶楼梯的时候,很显然只有一种走法:有两阶楼梯的时候,也很显然的知道有两种走法.就会有下面这 ...
- 算法:Climbing Stairs(爬楼梯) 6种解法
说明 算法:Climbing Stairs(爬楼梯) LeetCode地址:https://leetcode.com/problems/climbing-stairs/ 题目: You are cli ...
- 动态规划算法学习(一)爬楼梯和凑金额
爬楼梯 每步可跨台阶:1,2,3 -该场景表示有序组合 台阶总数:15 求多少种跨法 ''' 倒推下,当我倒数第二步已经走了14.13或12步时,我最后一步就可以就可以走完15个台阶此时我15步的走法 ...
最新文章
- HDU - 2767 Proving Equivalences tanjar强连通-DAG性质
- unity加载ab后,场景shader不起效问题(物件表现黑色)
- uboot 如何设置网关地址_两种网络地址段,如何设置内网和外网一起上?
- CentOS7解决配置静态IP还是会出现动态IP地址的问题
- Deep Learning 论文笔记 (2): Neural network regularization via robust weight factorization
- 10分钟看懂浏览器的渲染过程及优化
- 【转】UML基础: 第 2 部分 - 对象图 (Object Diagram)
- python自动搜索请求失败_http请求 request失败自动重新尝试代码示例
- 每天学一点flash(75) ToolTip 提示
- 在Ubuntu 14.04安装和使用Docker
- UVA11173 Grey Codes【位操作】
- node url模块
- python操作excel的读写
- 微积分Z2J5 两个重要极限
- java软电话_软电话使用呼叫中心的方法与流程
- Acer宏基笔记本电脑捕食者Predator PH317-55原装出厂Windows10系统恢复原厂OEM系统
- 2020 CCPC - 网络选拔赛 签到计划
- 转载:Android (争取做到)最全的底部导航栏实现方法
- 信号调制与二极管检波电路的multisim仿真
- 云南计算机网络技术专业培训学院,云南哪些大学有计算机网络技术专业
热门文章
- 100道动态规划——17 UVA 10934 Dropping water balloons 猜数问题
- 培育用户刷脸支付习惯尚需要一段时间
- 用C语言实现两个值交换的四种方法
- CC2530按键控制LED灯开关
- 手机版明日之后无限法则服务器,《明日之后》安卓版服务器被挤爆,玩家吐槽网易没钱买服务器,对此你怎么看?...
- 用html制作简单日历,CCS小技巧,如何使用CSS Grid制作简单的日历,简单有趣
- 什么塑造了今天的编程世界
- ps把bmp图片改成256色
- 那些年我们追过的拳皇(r8笔记第37天)
- uniapp去掉页面导航左上角的返回按钮