每日算法&面试题⚡动态规划21天——第二天
Posted 肥学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日算法&面试题⚡动态规划21天——第二天相关的知识,希望对你有一定的参考价值。
导读
肥友们为了更好的去帮助新同学适应算法和面试题,最近我们开始进行专项突击一步一步来。我们先来搞一下让大家最头疼的一类算法题,动态规划我们将进行为时21天的养成计划。还在等什么快来一起肥学进行动态规划21天挑战吧!!
21天动态规划入门
动态规划不是一种具体的算法,不像递归,枚举那样又一些特定的标识。相比较动态规划难就难在他的动态变化,以某些变量的动态变化来进行时间,空间上的节省。写动态规划时首先要确定好边界条件这是最主要的。
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例 1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
示例 2:
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶
//解法同上次斐波那契数列一致
public int climbStairs(int n) {
if(n==1||n==2||n==3){
return n;
}
int pre=1,end=2,now=3;
for(int i=3;i<n;i++){
pre=end;
end=now;
now=pre+end;
}
return now;
}
数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。
每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。
请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。
示例 1:
输入:cost = [10, 15, 20]
输出:15
解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。
示例 2:
输入:cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1]
输出:6
解释:最低花费方式是从 cost[0] 开始,逐个经过那些 1 ,跳过 cost[3] ,一共花费 6 。
根据上一题很容易解出来
//这类题都可以以二叉思路来分析,即在一个台阶上可以有两种方式上来(跨一次或跨两次)
public int minCostClimbingStairs(int[] cost) {
if(cost.length<2)return 0;
int[] sumCost=new int[cost.length+1];
sumCost[0]=sumCost[1]=0;
for(int i=2;i<cost.length+1;i++){
sumCost[i]=Math.min(cost[i-1]+sumCost[i-1],cost[i-2]+sumCost[i-2]);
}
return sumCost[cost.length];
}
面试题
同样也是很重要的面试问题Linux
的常用命令之cp
5. mv命令
(用于移动文件、目录或更名,move之意)
-f :force强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件已经存在,就会询问是否覆盖
-u :若目标文件已经存在,且比目标文件新,才会更新
这套Linux面试必学知识肥学会一直更下去,我觉得我一下子都总结出来。大家肯定放在收藏夹吃灰所以我们就每天学习一点,肥学每一天。
特别介绍
📣小白练手专栏,适合刚入手的新人欢迎订阅编程小白进阶
📣python有趣练手项目里面包括了像《机器人尬聊》《恶搞程序》这样的有趣文章,可以让你快乐学python练手项目专栏
📣另外想学JavaWeb进厂的同学可以看看这个专栏:传送们
📣这是个面试和考研的算法练习我们一起加油上岸之路
资料领取
这里有python,Java学习资料还有有有趣好玩的编程项目,更有难寻的各种资源。反正看看也不亏。
以上是关于每日算法&面试题⚡动态规划21天——第二天的主要内容,如果未能解决你的问题,请参考以下文章