首页 > 其他分享 >Day 32 动态规划 Part01

Day 32 动态规划 Part01

时间:2024-08-04 12:39:04浏览次数:15  
标签:Part01 32 Solution fib int length cost Day dp

动态规划解题步骤

  1. 确定dp数组(dp table)以及下标的含义
  2. 确定递推公式
  3. dp数组如何初始化
  4. 确定遍历顺序
  5. 举例推导dp数组

509. 斐波那契数

显然dp[i]代表fib[i]fib[i] = fib[i-1] + fib[i-2]fib[0] = 0, fib[1] = 1,遍历从前往后遍历即可。下面的代码优化了空间复杂度,但思路是一致的。

class Solution {
    public int fib(int n) {
        if(n <= 1) return n;
        int pre = 0, cur = 1;
        for(int i = 2; i <= n; i++){
            int sum = pre + cur;
            pre = cur;
            cur = sum;
        }
        return cur;
    }
}

70. 爬楼梯

这道题与斐波那契数列完全一致,按照五步走。dp[i]代表了爬到第i个台阶的方法数,显然第i层台阶可以从i-1,和i-2爬过来,即dp[i] = dp[i-1] + dp[i-2]。初始值保证dp[2]正确就行。

class Solution {
    public int climbStairs(int n) { 
        // dp[i]代表i阶楼梯有多少种方法
        // dp[0] = dp[1] = 1,可以验证其正确性,因为dp[2] = dp[0] + dp[1] = 2是正确的
        if(n <= 1) return 1;
        int pre = 1, cur = 1;
        for(int i = 2; i <= n; i++){
            int sum = pre + cur;
            pre = cur;
            cur = sum;
        }
        return cur;
    }
}

746. 使用最小花费爬楼梯

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

标签:Part01,32,Solution,fib,int,length,cost,Day,dp
From: https://www.cnblogs.com/12sleep/p/18341634

相关文章

  • Day19 本周心得体会
    本周学习了二叉树相关内容,较为深刻的了解了dfs的整个过程和各种题目的思考方向。基础二叉树中最基础的内容为递归序遍历dfs和层序遍历bfs,之后的各种题目都是对这两种方式的应用dfs深度优先搜索,对于树来说就是递归序遍历,对于树上的每个节点,访问的时机有三个,第一次遇到,从左孩子......
  • GD32 MCU硬件I2C不可靠不如软件I2C?
    在一个评论中,看到网友对硬件I2C的讨论,硬件I2CBusy找不到原因、软件I2C稳得一批。那么为什么会出现I2CBUSY?硬件I2C真的不如软件I2C吗?怎么让硬件I2C也稳得一批,让我们来一探究竟。首先我们从I2C时序分析下I2C总线挂死是如何产生的。我们来看下I2C的时序和流程:所以总线挂......
  • Python爬虫技术 第32节 最佳实践和常见问题
    Python爬虫技术是一种用于从网站上自动抓取数据的技术。它涉及到网络请求、HTML解析、数据提取等多个环节。下面我将详细介绍Python爬虫的最佳实践以及一些常见的问题解决方法,包括日志记录和错误报告、爬虫维护和更新等方面。Python爬虫基础架构一个典型的Python爬虫程序......
  • 代码随想录算法训练营day03|203.移除链表元素,707.设计链表,206.反转链表
    203.移除链表元素题目链接:https://leetcode.cn/problems/remove-linked-list-elements/description/我的代码(分头节点和中间节点两种情况操作):/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val......
  • STM32卡死、跑飞如何调试确定问题
    目录前言一、程序跑飞原因二、调试工具2.1Registers工具2.2Memory工具2.3 Disassembly工具2.4 CallStack工具三、找到程序跑飞位置方式一、方式二、前言我们初学STM32的时候代码难免会出现疏忽,导致程序跑飞,不再正常运行,那么都是什么情况会导致STM32程序跑飞......
  • 嵌入式学习day9(string函数族)
    一丶strcpy和strncpy1.strcpy    #include<string.h>    char*strcpy(char*dest,constchar*src);    功能:实现字符串复制    参数:char*dest:目标字符串首地址    constchar*src:原字符串首地址    返回值:目标字符串首地......
  • 代码随想录 day 44 最长公共子序列 | 不相交的线 | 最大子序和 | 判断子序列
    最长公共子序列最长公共子序列解题思路本题dp数组的含义是最长公共序列,而后同时遍历两个字符串,遇到相同的字母是公共子序列+1,否则取两个字符串的公共子序列中较长的一个。知识点动态规划,子序列心得没有想到比较两个字符串的公共子序列。我自己是遇到相同字母时将所有后续的......
  • 日撸Java三百行(day12:顺序表二)
    目录一、关于昨天的补充1.final关键字2.toString()方法二、今日代码实现1.顺序表的查找操作2.顺序表的插入操作3.顺序表的删除操作4.数据测试总结一、关于昨天的补充1.final关键字publicstaticfinalintMAX_LENGTH=10;在昨天的这行代码中,用到了final关键字......
  • 链表part01
    今天是8月2日,学习了链表的基础知识。题目主要是链表的基础操作和反转链表,注意虚拟头节点的使用、next的顺序和tmp的灵活使用。1.移除元素题目:给一个链表的头节点head和整数val,请删除链表中所有满足Node.val==val的节点,并返回新的头节点。删除的方法,cur指针挨个遍......
  • 从零开始的JAVAday29~day35
    后续语法if()语法若满足()中的语法,则执行后面的语句。循环for(a;b;c)和while(c)语法for(a;c;b)语法意思为在循环前进行a语句每次循环结束后进行b语法,若满足c语句则再次循环。whlie(c)循环若满足c条件则循环。......