LeetCode刷题笔记之动态规划(一)

一、动态规划的基础知识

  1. 动态规划(Dynamic Programming,简称DP),动态规划问题的一般形式就是求最值,求解动态规划的核心问题是穷举,动态规划中每一个状态一定是由上一个状态推导出来的。
  2. 解题步骤:
    • 确定dp数组(dp table)以及下标的含义
    • 确定递推公式
    • dp数组如何初始化
    • 确定遍历顺序
    • 举例推导dp数组

二、一维状态转移公式

1. 509【斐波那契数】

  • 题目: 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
    F(0) = 0,F(1) = 1
    F(n) = F(n - 1) + F(n - 2),其中 n > 1
    给定 n ,请计算 F(n) 。
  • 代码:
class Solution {public int fib(int n) {//1.确定dp数组,及下标含义:第i个斐波那契数//2.确定递推公式,即状态转移方程:题中给出//3.确定如何初始化dp数组,题中给出//4.确定遍历顺序,题中给出//5.推导验证dp数组if(n<=1) return n;int[] dp = new int [n+1];dp[0] = 0;dp[1] = 1;for (int i = 2; i <=n ; i++) {dp[i] = dp[i-1] + dp[i-2];}return dp[n];}
}

2. 70【爬楼梯】

  • 题目: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
  • 代码:
class Solution {public int climbStairs(int n) {//dp数组,爬第i层楼梯有几种方式//dp[i] = dp[i-1]+dp[i-2]//dp[1]=1,dp[2]=2if(n<=2) return n;int[] dp = new int [n+1];dp[1] = 1;dp[2] = 2;for (int i = 3; i <=n ; i++) {dp[i] = dp[i-1]+dp[i-2];}return dp[n];}
}

3. 746【使用最小花费爬楼梯】

  • 题目: 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
    你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
    请你计算并返回达到楼梯顶部的最低花费。
  • 代码:
class Solution {public int minCostClimbingStairs(int[] cost) {//你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯//这句话表示爬到0或1是不用支付费用的,但是从0或1开始爬是要花费的//dp数组表示爬到第i个台阶需要支付的最小费用//dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])//dp[0]=0,dp[1]=0int[] dp = new int[cost.length+1];for (int i = 0; i <= cost.length; i++) {if(i==0||i==1) dp[i] = 0;else {dp[i] = Math.min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);}}return dp[cost.length];}
}

三、二维状态转移公式

1. 62【不同路径】

  • 题目: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。问总共有多少条不同的路径?
  • 代码:
class Solution {public int uniquePaths(int m, int n) {//dp表示的是到达第i行j列总共有多少路径//dp[i][j] = dp[i-1][j]+dp[i][j-1]//关键的是第一行和第一列的所有位置都只有一种方法int[][] dp = new int[m][n];for(int i=0;i<m;i++){dp[i][0] = 1;}for (int i = 0; i < n; i++) {dp[0][i] = 1;}for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {dp[i][j] = dp[i-1][j]+dp[i][j-1];}}return dp[m-1][n-1];}
}

2. 63【不同路径 II】

  • 题目: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。
  • 代码:
class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {//有障碍物的地方dp应该直接赋值为0//第一行和第1列只要遇到障碍物就停止赋值int m = obstacleGrid.length;int n = obstacleGrid[0].length;int[][] dp = new int[m][n];for (int i = 0; i < m; i++) {if(obstacleGrid[i][0] == 1) break;dp[i][0] = 1;}for (int i = 0; i < n; i++) {if(obstacleGrid[0][i] == 1) break;dp[0][i] = 1;}for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {if(obstacleGrid[i][j] == 1){dp[i][j] = 0;}else{dp[i][j] = dp[i-1][j]+dp[i][j-1];}}}return dp[m-1][n-1];}
}

3. 96【不同的二叉搜索树】

  • 题目: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
  • 代码:
class Solution {public int numTrees(int n) {//dp表示节点值从1到n组成的不同的BST数,rp表示由n个节点组成,且根节点为i的BST数//从每个节点组成的树的角度,dp[i]=rp[1]+rp[2]+...+rp[i-1]+rp[i]//从树的左右子树角度,rp[i]=dp[i-1]*dp[n-i]//所以dp[i]=dp[1-1]*dp[n-1]+...+dp[i-1]*dp[i-i]//初始化dp[1]=dp[0]*dp[0],dp[0]=1int[] dp = new int[n+1];dp[0] = 1;for(int i=1;i<=n;i++){for(int j=1;j<=i;j++){dp[i] += dp[j-1]*dp[i-j];}}return dp[n];}
}

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

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

相关文章

stm32学习笔记:SPI通信协议原理(未完)

一、SPI简介(serial Peripheral Interface&#xff08;串行 外设 接口&#xff09;) 1、电路模式&#xff08;采用一主多从的模式&#xff09;、同步&#xff0c;全双工 1 所有SPI设备的SCK、MOSI、MISO分别连在一起 2 主机另外引出多条SS控制线&#xff0c;分别接到各从机的S…

DetNet论文速读

paper&#xff1a;DetNet: A Backbone network for Object Detection 存在的问题 最近的目标检测模型通常依赖于在ImageNet分类数据集上预训练的骨干网络。由于ImageNet的分类任务不同于目标检测&#xff0c;后者不仅需要识别对象的类别&#xff0c;而且需要对边界框进行空间…

音视频开发_音频基础知识

如何采集声音——模数转换原理 声音模数转换是将声音信号从模拟形式转换为数字形式的过程。它是数字声音处理的基础&#xff0c;常用于语音识别、音频编码等应用中。 音视频通信流程 音视频采集&#xff1a;首先是从麦克风、摄像头等设备中采集音频和视频数据&#xff0c;将现…

编写Linux的SHELL脚本设置环境变量遇到的那些坑

1.背景 最近进行一个rocketmq的单机版安装&#xff0c;发现安装步骤很繁琐&#xff0c;想着写一个shell脚本&#xff0c;一键执行安装。 本文仅在于说明关于JDK的环境变量设置为示例 2.SHELL脚本设置环境变量 #!/bin/sh #定义变量 profile_file~/.bash_profile #1.安装JDK t…

SQL之常用字符串函数

1. LOWER( )&#xff1a;将字符串中的所有字符转换为小写。 select lower(Hello World); -- 输出&#xff1a;hello world 2. UPPER( )&#xff1a;将字符串中的所有字符转换为大写。 select upper(Hello World); -- 输出&#xff1a;HELLO WORLD 3. CONCAT( )&#xff…

【Windows】VMware虚拟机应用(一):下载安装 VMware Workstation

目录 一、下载 二、注意事项 三、安装 四、密钥激活 4.1 密钥 4.2 激活 一、下载 进入官网下载页 VMware Customer Connect | The All-In-One VMware Product Support Portal 先登录&#xff0c;下载时要求登录。 点【Downloads】 进入产品下载页面&#xff0c;切换到…

手写简易操作系统(三)--加载Loader

前情提要 上一节我们讲了如何启动计算机&#xff0c;这一节我们讲如何加载内核&#xff0c;内核是存在于硬盘上的一段程序&#xff0c;要加载这段程序&#xff0c;那么必然需要从硬盘上读取数据&#xff0c;这里我们就需要使用 ATA PIO 模式 根据ATA规范&#xff0c;所有符合A…

深度学习的一些工具函数

文章目录 简介数据集划分数据集 简介 记录深度学习编写程序过程中的一些工具函数 数据集 划分数据集 数据集划分思路&#xff1a; 若数据集很小&#xff0c;直接随机打乱 import random random.shuffle(data)若数据集很大&#xff0c;选择随机打乱下标&#xff0c;根据下…

docker部署springboot jar包项目

docker部署springboot jar包项目 前提&#xff0c;服务器环境是docker环境&#xff0c;如果服务器没有安装docker&#xff0c;可以先安装docker环境。 各个环境安装docker&#xff1a; Ubuntu上安装Docker&#xff1a; ubuntu离线安装docker: CentOS7离线安装Docker&#xff1…

算法-排序

0、复杂度及稳定性 时间复杂度空间复杂度 稳定性&#xff08;相等元素相对顺序不变&#xff09; 冒泡排序 时间复杂度为O(n^2) 最坏/平均&#xff1a;O(n^2) 最好&#xff1a;O(n)&#xff0c;序列有序 O(1)稳定插入排序 时间复杂度为O(n^2) 最坏/平均&#xff1a;O(n^2) 最好…

可视化场景(2):电商大屏-引爆业绩,直观呈现

hello&#xff0c;我是贝格前端工场&#xff0c;本期分享可视化大屏在电商领域的应用&#xff0c;如需要定制&#xff0c;可以与我们联络&#xff0c;开始了。 电商领域的可视化大屏可以提供实时的销售数据、用户行为分析、库存管理等信息&#xff0c;帮助企业实时监控经营状况…

java jdk17 HashMap解读

类描述 基于Hash表的Map接口实现。此实现提供了所有的可选的map操作&#xff0c;并且避免了null值和null键。&#xff08;HashMap类大体上等价于Hashtable,除了它是非同步的和禁止null&#xff09;。此类不保证map的顺序。特别是&#xff0c;不保证随着时间的变化顺序保持不变…

不知道吧,腾讯云轻量应用服务器使用有一些限制!

腾讯云轻量应用服务器相对于云服务器CVM是有一些限制的&#xff0c;比如轻量服务器不支持更换内网IP地址&#xff0c;不支持自定义私有网络VPC&#xff0c;内网连通性方面也有限制&#xff0c;轻量不支持CPU内存、带宽或系统盘单独升级&#xff0c;只能整个套餐整体升级&#x…

题目 2021: 坐标排序

题目描述: 请将坐标x,y,z依照以下规则排序&#xff1a; x为第一关键字&#xff0c;当x相同时&#xff0c;依照y&#xff08;第二关键字&#xff09;大小来排序&#xff0c;当y相同时&#xff0c;依照z大小来排序&#xff08;第三关键字&#xff09; 给出了若干坐标&#xff0c…

【AIGC调研系列】大模型的system prompt破解调研

大模型的system prompt破解方法实践主要涉及到prompt工程和提示注入等技术。首先&#xff0c;prompt工程是指通过精心设计prompt&#xff0c;以提高与大模型的交互效率和准确性。这包括了如何清晰地表达任务要求和期望结果[2]&#xff0c;如何有效使用prompt[4]&#xff0c;以及…

Anthropic 公司最新宣布,他们的 AI 聊天机器人模型击败了 OpenAI 的 GPT-4

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Unity Text文本实现滚动跑马灯效果

在一些公告上我们经常会看到文字滚动跑马灯的效果。 那么在Unity上如何实现&#xff1f; 1、首先创建一个Text(或者TextMeshPro)组件&#xff0c;然后输入需要显示的文本内容&#xff0c;如图&#xff1a; 2、编写控制脚本TextRoll.cs&#xff1a; using System.Collections…

【MGR】MySQL Group Replication 监控

目录 17.4 Monitoring Group Replication 17.4.1 Group Replication Server States 17.4.2 The replication_group_members Table 17.4.3 The replication_group_member_stats Table 17.4 Monitoring Group Replication 17.4.1 Group Replication Server States 服务器实例…

钉钉h5应用 globalthis is not defined vite client

钉钉h5应用 globalthis is not defined vite client problem 背景 钉钉h5应用使用 vue3 vite 构建的前端工程 问题 h5页面在pc端浏览器和pc端钉钉打开正常h5页面在移动端钉钉打开异常 页面空白 通过调试工具找到报错信息 globalthis is not defined vite client reason …

ULTRAL SCALE FPGA TRANSCEIVER速率

CPLL支持2-6.25速率 QPLL支持速率 实际使用CPLL最高可以超过这个&#xff0c;QPLL最低也可以低于这个&#xff0c;xilinx留的阈量还是比较大。