array专题2---理解暴力枚举与动态规划

746 Min Cost Climbing Stairs

一直以后对暴力枚举(又称:深度优先搜索)和动态规划不太理解,不能明白个中区别,更别说贪心。今天做这道题目的时候有点心得。
思路一:看到题目,直觉告诉我暴力枚举可以。每遇到一个台阶i,我可以花费cost[i]跳过去,也可以花费cost[i+1]直接跳到i+1台阶,也相当于跳过i台阶了。我就用这种方式,不断跳过最后一个台阶n,到达n+1级台阶。

public int minCostClimbingStairs(int[] cost) {minCost = Integer.MAX_VALUE;visit(cost,0,0,true);return minCost;}private void visit(int[] cost, int curStep,int curCost,boolean skip) {if(curStep == cost.length-1){if(!skip){curCost += cost[curStep];}curStep++;}if(curStep>=cost.length){minCost = Math.min(curCost, minCost);return;}//花费代价跳过这个台阶,下一个台阶就允许直接跳过visit(cost,curStep+1,curCost+cost[curStep],true);if(skip){//不花费代价跳过这个台阶,下一个台阶就必须付出代价visit(cost,curStep+1,curCost,false);}}

思路二:动态规划是从最终目的着手。最终目的是要跳到下标为n的级台阶,从0开始计算。那么跳到n级台阶的代价与n-1级台阶有什么关系呢?找到子问题与原问题的关系式,这就是与暴力搜索不一样的地方,暴力搜索按照题目意思可以直接写代码。到达第i级台阶的代价:dp[i] = min(dp[i-2] + cost[i-2], dp[i-1] + cost[i-1])。i从0,1开始,dp[0]=0,dp[1]=0。

    public int minCostClimbingStairsV2(int[] cost) {return dpcost(cost.length ,cost);}private int dpcost(int n,int[] cost){if(n==0 || n==1){return 0;}return Math.min(dpcost(n-2,cost)+cost[n-2], dpcost(n-1,cost)+cost[n-1]);}

下一个版本是对动态规划做改进。当n=5的时候会计算dpcost(3),dpcost(4),当n=4的时候会计算dpcost(2),dpcost(3),dpcost(3)计算了两次,用数组存起来。当然也可以用两个变量存一下,更节省空间。

public int minCostClimbingStairsV3(int[] cost) {int[] dp = new int[cost.length+1];dp[0] = 0;dp[1] = 0;for(int i=2;i<cost.length+1;i++){dp[i] = Math.min(dp[i-2]+cost[i-2], dp[i-1]+cost[i-1]);}return dp[cost.length ];}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第五十八期:AI艺术日渐繁荣,未来何去何从?

本文的配图都是AI艺术领域领导者、德国艺术家马里奥克林格曼(Mario Klingemann)利用人工智能创作的作品。 利用人工智能创作而成的画作近年来越来越受瞩目&#xff0c;有的作品甚至能在知名拍卖行拍得高价。但这类作品仍有不少问题需要解答&#xff0c;比如它的作者是开发出算…

【数据结构与算法】字符串匹配 KMP 算法

单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法多模式串匹配算法 Trie 树和 AC 自动机 KMP 算法 KMP 算法是根据三位作者&#xff08;D.E.Knuth&#xff0c;J.H.Morris 和 V.R.Pratt&#xff09;的名字来命名的&#xff0c;算法的全称是 Knuth Morris Pratt 算法&#x…

array专题3-一道题目不断分析就会慢慢有了思路

#697 Degree of an Array 我承认慢慢有了思路的前提是你要见过那些解法&#xff0c;否则怎么想也想不到。多做题目&#xff0c;就像是多看书一样重要。 问题&#xff1a;一个数组的度这个数组中出现次数最多元素的出现次数。要找的是最短的子数组&#xff0c;而这个数组的度原数…

第五十九期:商用数据库之死:Oracle 面临困境

作者&#xff1a;John Freeman、Fred McClimans 和 Zach Mitchell 我们预计到 2021 年&#xff0c;年产值 296 亿美元的商业数据库市场会收缩 20% 至 30%&#xff0c;认为 Oracle 无法让收入来源足够快地实现转型&#xff08;从传统的商业数据库转向基于云的订购产品&#xff0…

基于上一篇AS项目依赖库问题的优化解决方案

//TODO 转载于:https://www.cnblogs.com/Jhon-Mr/p/10839548.html

【数据结构与算法】【应用】字符串匹配

单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法多模式串匹配算法 Trie 树和 AC 自动机 一、单模式串匹配&#xff1a; BF&#xff1a; 简单场景&#xff0c;主串和模式串都不太长, O(m*n)KP&#xff1a;字符集范围不要太大且模式串不要太长&#xff0c; 否则hash值可能冲…

第六十期:华为:希望把VR/AR打造成下个智能手机产业

网易科技讯 10 月 19 日消息&#xff0c;2019 世界 VR 产业大会在江西省南昌市举行。华为轮值董事长郭平发表了《打造 VR/AR 信息高速公路&#xff0c;支撑产业繁荣》的主题演讲。郭平认为&#xff0c;VR/AR 将成为 5G 时代的首批应用&#xff0c;与 5G 产业发展节奏高度匹配并…

array专题4

674 Longest Continuous Increasing Subsequence 问题&#xff1a;比较简单&#xff0c;直接看代码。问题是速度更快的代码是什么样子&#xff1f; 代码 665 Non-decreasing Array 思路&#xff1a;非降序数组&#xff0c;能有一次修改的机会。那就是查找 array[i1]<arr…

零基础入门stm32需要学这些东西

1.首先我们先看看与STM32相关的文档 我们假定大家已经对STM32的书籍或者文档有一定的理解。如不理解&#xff0c;请立即阅读STM32的文档&#xff0c;以获取最基本的知识点。 如果你手上拥有ST官方主推的STM32神舟系列的板子&#xff0c;那么光盘都会配好这些文档&#xff0c;ST…

【数据结构与算法】字符串匹配 AC自动机

单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法多模式串匹配算法 Trie 树和 AC 自动机 AC 自动机 AC 自动机实际上就是在 Trie 树之上&#xff0c;加了类似 KMP 的 next 数组&#xff0c;只不过此处的 next 数组是构建在树上罢了。 AC 自动机的构建 将多个模式串构建成…

第六十一期:中国农民花3000块,发明史上最牛输入法!曾火遍中国20年

投递人 itwriter “王旁青头戋(兼)五一&#xff0c;土十二干士寸雨” 如果你还能熟练的背出这段口诀&#xff0c;恭喜你&#xff0c;又暴露年龄了。 倒回到十几年前&#xff0c;在刀哥被老师带到穿鞋套才能进神秘的机房&#xff0c;练习打字的时候&#xff0c;会五笔的人简直是…

数学归纳法证明Nicomachus's Theorem

今天看了《计算机程序设计艺术卷1》的部分内容。也希望更深入了解一下数学归纳法。所以将网页基本算重新写了一遍&#xff0c;写下证明过程。 理论Theorem 1311312335233533791133791143131517194313151719… 总的来说&#xff1a; ∀n∈N>0,n3∑ni1(n2−n2∗i−1)(n2−n…

第六十二期:腾讯云发布“小程序·云开发十大优秀实践”:猫眼、唯品会等入选

作者&#xff1a;周小白 【TechWeb】10 月 19 日消息&#xff0c;今日&#xff0c;腾讯云首次对外公布了“小程序云开发十大优秀实践”&#xff0c;包括白鹭引擎、千墨科技、腾讯新闻、即速应用、微盟、唯品会、猫眼、香格里拉、微信读书、微信支付等&#xff0c;涉及多个行业。…

[Leetcode][第17题][JAVA][电话号码的字母组合][回溯]

【问题描述】[中等] 【解答思路】 用哈希表/数组存储每个数字对应的所有可能的字母&#xff0c;然后进行回溯操作。 回溯过程中维护一个字符串&#xff0c;表示已有的字母排列&#xff08;如果未遍历完电话号码的所有数字&#xff0c;则已有的字母排列是不完整的&#xff09;…

(68)zabbix windows性能计数器使用详解

概述 windows下的性能计数器让zabbix监控更加轻松&#xff0c;直接获取性能计数器的数值即可完成windows监控。性能计数器如下&#xff1a; 1perf_counter["\Processor(0)\Interrupts/sec"]或 1perf_counter["\Processor(0)\Interrupts/sec", 10]获取所有性…

欧几里得算法以及推论

欧几里得算法euclids algorithm 欧几里得算法又称辗转相除法&#xff0c;用于计算两个正整数a、b的最大公约数(greatest common divisor)。计算公式gcd(a,b) gcd(b, a%b)。用于RSA加密。 证明过程&#xff1a;参见 欧几里得算法扩展 给定两个正整数a、b&#xff0c;在计算…

第六十三期:微软与阿里云合作推出“开放应用模型(OAM)”

投递人 itseeker 英文原文&#xff1a;Announcing the Open Application Model (OAM) 原文标题&#xff1a;微软与阿里云合作推出“开放应用模型&#xff08;OAM&#xff09;” 用于 Kubernetes 及更多平台的应用开发、运行的开放标准 Kubernetes 已经成为业界领先的容器编排环…

Java基础课程---将一个字符串反转,将字符串中指定部分进行反转,比如,abcdefg, 反转为abfedcg...

1 将一个字符串反转&#xff0c;将字符串中指定部分进行反转&#xff0c;比如&#xff0c;"abcdefg", 反转为"abfedcg" 方式一 public class StringDemo {// 方式一 转为 char[]public String reverse(String str,int startIndex,int endIndex){if(str !n…

【数据结构与算法】【算法思想】贪心算法

贪心算法 回溯算法 分治算法 动态规划 四种基本的算法思想&#xff1a;贪心算法&#xff0c;分治算法&#xff0c;回溯算法&#xff0c;动态规划&#xff0c;他们不是具体算法&#xff0c;常用来指导我们设计具体的算法和编码等。 一&#xff1a;贪心算法有很多经典应用 霍夫…

第六十四期:微软将不再把 .NET Framework API 移植到 .NET Core 3.0

投递人 itwriter 目前 .NET Core 3.0 拥有的 API 总数约为 .NET Framework API 的 80%&#xff0c;剩下尚未从 .NET Framework 移植到 .NET Core 的 API&#xff0c;微软考虑以开源的形式发布。 微软方面表示&#xff0c;通过 .NET Core 3.0&#xff0c;他们现在已具备轻松移植…