如何建单页网站网络工程师考试大纲
web/
2025/9/27 19:56:40/
文章来源:
如何建单页网站,网络工程师考试大纲,深圳做app网站的公司,枣庄网站优化理论基础
刷题大纲#xff1a; 动态规划5步曲#xff1a; 1、确定dp数组以及下标的含义 2、确定递推公式 3、dp数组如何初始化 4、确定遍历顺序 5、举例推导dp数组 509. 斐波那契数 509. 斐波那契数 - 力扣#xff08;LeetCode#xff09; 代码随想录 (programmercarl.co…理论基础
刷题大纲 动态规划5步曲 1、确定dp数组以及下标的含义 2、确定递推公式 3、dp数组如何初始化 4、确定遍历顺序 5、举例推导dp数组 509. 斐波那契数 509. 斐波那契数 - 力扣LeetCode 代码随想录 (programmercarl.com) 手把手带你入门动态规划 | LeetCode509.斐波那契数_哔哩哔哩_bilibili 斐波那契数 通常用 F(n) 表示形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始后面的每一项数字都是前面两项数字的和。也就是 F(0) 0F(1) 1
F(n) F(n - 1) F(n - 2)其中 n 1给定 n 请计算 F(n) 。 示例 1 输入n 2
输出1
解释F(2) F(1) F(0) 1 0 1示例 2 输入n 3
输出2
解释F(3) F(2) F(1) 1 1 2示例 3 输入n 4
输出3
解释F(4) F(3) F(2) 2 1 3提示 0 n 30 动规五部曲 用一个一维dp数组来保存递归的结果 1、确定dp数组以及下标的含义 dp[i]的定义为:第i个数的斐波拉契值是dp[i] 2、确定递归公式 这道题的公式dp[i]dp[i-1]dp[i-2] 3、dp数组如何初始化 该题dp[0]0; dp[1]1 4、确定遍历顺序后一个数的值依赖于前一个数的值所以遍历的顺序应该是从前往后 for(int index 2; index n; index){} 5、举例子推导dp数组 当n为10dp数组应该是如下的数列0 1 1 2 3 5 8 13 21 34 55写完代码之后可以手动带入看一下结果是否正确 综合代码 // 非压缩状态的版本
class Solution {public int fib(int n) {if (n 1) return n; // 如果 n 小于等于 1直接返回 nint[] dp new int[n 1]; // 创建一个数组 dp长度为 n1dp[0] 0; // dp 数组的第一个元素为 0dp[1] 1; // dp 数组的第二个元素为 1for (int index 2; index n; index){ // 循环从 2 到 ndp[index] dp[index - 1] dp[index - 2]; // 计算 Fibonacci 数列的第 index 项并存储到 dp 数组中}return dp[n]; // 返回 Fibonacci 数列的第 n 项}
}70. 爬楼梯 70. 爬楼梯 - 力扣LeetCode 代码随想录 (programmercarl.com) 带你学透动态规划-爬楼梯对应力扣70.爬楼梯| 动态规划经典入门题目_哔哩哔哩_bilibili 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢 示例 1 输入n 2
输出2
解释有两种方法可以爬到楼顶。
1. 1 阶 1 阶
2. 2 阶 示例 2 输入n 3
输出3
解释有三种方法可以爬到楼顶。
1. 1 阶 1 阶 1 阶
2. 1 阶 2 阶
3. 2 阶 1 阶提示 1 n 45 n2,输出2n3,输出3;n4,输出5..... 可以发现532, 这道题和上一道斐波拉契的解法相同。
动规五部曲
定义一个一维数组来记录每级台阶的状态
1、确定dp以及下标的含义dp[i]: 爬到第i层楼有dp[i]种方法
2、确定递推公式
从dp[i]的定义可以看出dp[i] 可以有两个方向推出来。
首先是dp[i - 1]上i-1层楼梯有dp[i - 1]种方法那么再一步跳一个台阶不就是dp[i]了么。
还有就是dp[i - 2]上i-2层楼梯有dp[i - 2]种方法那么再一步跳两个台阶不就是dp[i]了么。
那么dp[i]就是 dp[i - 1]与dp[i - 2]之和
所以dp[i] dp[i - 1] dp[i - 2] 。
3、dp数组如何初始化dp[1] 1dp[2] 2
4、确定遍历顺序和斐波拉契一样从前往后
5、举例推导dp数组当n5: 综合代码
// 用变量记录代替数组
class Solution {public int climbStairs(int n) {if(n 2) return n;int a 1, b 2, sum 0;for(int i 3; i n; i){sum a b; // f(i - 1) f(i - 2)a b; // 记录f(i - 1)即下一轮的f(i - 2)b sum; // 记录f(i)即下一轮的f(i - 1)}return b;}
} 以上代码中迭代过程如下
初始状态
a 1
b 2
sum 0第一次迭代
a 1
b 2
sum a b 1 2 3第二次迭代
a b 2
b sum 3
sum a b 2 3 5第三次迭代
a b 3
b sum 5
sum a b 3 5 8以此类推...
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81003.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!