代码随想录算法训练营第三十三天|Day33 动态规划

62.不同路径

https://programmercarl.com/0062.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84.html

视频讲解:https://www.bilibili.com/video/BV1ve4y1x7Eu

思路

int **initDP(int m, int n) {int **dp = (int**)malloc(sizeof(int *) * m);int i, j;for(i = 0; i < m; ++i) {dp[i] = (int *)malloc(sizeof(int) * n);}for(i = 0; i < m; ++i)dp[i][0] = 1;for(j = 0; j < n; ++j)dp[0][j] = 1;return dp;
}int uniquePaths(int m, int n){int **dp = initDP(m, n);int i, j;for(i = 1; i < m; ++i) {for(j = 1; j < n; ++j) {dp[i][j] = dp[i-1][j] + dp[i][j-1];}}int result = dp[m-1][n-1];free(dp);return result;
}

学习反思

主要实现了一个计算从起点到终点的唯一路径数的函数uniquePaths。通过动态规划的思想,利用一个二维数组来保存到达每个位置的路径数。函数initDP用于初始化一个大小为m*n的动态规划数组dp,并将起点位置的路径数初始化为1。函数uniquePaths先调用initDP初始化dp数组,然后通过两个for循环遍历dp数组,根据动态规划的递推公式计算每个位置的路径数。最后返回终点位置的路径数,同时释放掉dp数组的内存。时间复杂度为O(mn),空间复杂度为O(mn)。

63. 不同路径 II

https://programmercarl.com/0063.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84II.htmlhttps://programmercarl.com/0063.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84II.html

视频讲解:https://www.bilibili.com/video/BV1Ld4y1k7c6

思路

int uniquePathsWithObstacles(int** obstacleGrid, int obstacleGridSize, int* obstacleGridColSize){int m = obstacleGridSize;int n = obstacleGridColSize[0];int *dp = (int*)malloc(sizeof(int) * n);int i, j;for (j = 0; j < n; ++j) {if (obstacleGrid[0][j] == 1)dp[j] = 0;else if (j == 0)dp[j] = 1;elsedp[j] = dp[j - 1];}for (i = 1; i < m; ++i) {for (j = 0; j < n; ++j) {if (obstacleGrid[i][j] == 1)dp[j] = 0;else if (j != 0)dp[j] += dp[j - 1];}}return dp[n - 1];
}

学习反思

在原有的uniquePaths基础上,添加了一个障碍物的判断条件。obstacleGrid是一个二维数组,表示地图,其中1表示障碍物,0表示可通行的路径。函数uniquePathsWithObstacles通过动态规划的思想,利用一个一维数组dp来保存到达每个位置的路径数。首先,根据障碍物的情况初始化第一行的路径数,如果遇到障碍物,则该位置的路径数为0,否则,第一行的路径数与前一个位置的路径数相同。然后,从第二行开始遍历,对于每个位置,如果遇到障碍物,则将该位置的路径数设为0;否则,将该位置的路径数更新为前一个位置的路径数与当前位置的路径数之和。最后,返回dp数组的最后一个元素,即终点位置的路径数。时间复杂度为O(m*n),空间复杂度为O(n)。

343.整数拆分

https://programmercarl.com/0343.%E6%95%B4%E6%95%B0%E6%8B%86%E5%88%86.html

视频讲解:https://www.bilibili.com/video/BV1Mg411q7YJ

思路

int *initDP(int num) {int* dp = (int*)malloc(sizeof(int) * (num + 1));int i;for(i = 0; i < num + 1; ++i) {dp[i] = 0;}return dp;
}
int max(int num1, int num2, int num3) {int tempMax = num1 > num2 ? num1 : num2;return tempMax > num3 ? tempMax : num3;
}
int integerBreak(int n){int *dp = initDP(n);dp[2] = 1;int i;for(i = 3; i <= n; ++i) {int j;for(j = 1; j < i - 1; ++j) {      dp[i] = max(dp[i], j * (i - j), j * dp[i - j]);}}return dp[n];
}

学习反思

动态规划的例子,用于解决整数拆分问题。给定一个正整数n,拆分成至少两个正整数的和,并使得拆分后的正整数的乘积最大。函数integerBreak返回拆分后的正整数的乘积的最大值。函数initDP用于初始化一个大小为num + 1的数组dp,并将所有元素初始化为0。函数max用于返回三个数中的最大值。函数integerBreak通过动态规划的思想,遍历从3到n的所有整数,对于每个整数i,遍历从1到i - 1的所有整数j,并更新dp[i]的值。dp[i]的值表示将整数i拆分后的最大乘积。对于每个整数i,计算j * (i - j)以及j * dp[i - j]的最大值,并将其与dp[i]的值比较,更新dp[i]的值。最后,返回dp[n]的值,即拆分后的正整数的乘积的最大值。该代码的时间复杂度为O(n^2),空间复杂度为O(n)。

总结

动态规划,加油!!!

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

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

相关文章

Qt指定程序编译生成文件的位置

shadow build: [基础]Qt Creator 的 Shadow build(影子构建)-CSDN博客 影子构建&#xff1a;将源码路径和构建路径分开&#xff08;生成的makefile文件和其他产物都不放到源码路径&#xff09;&#xff0c;以此来保证源码路径的清洁。 实验1&#xff1a; 我创建了两个项目:…

嵌入式常用功能之通讯协议1--串口

嵌入式常用功能之通讯协议1--串口&#xff08;本文&#xff09; 嵌入式常用功能之通讯协议1--IIC 嵌入式常用功能之通讯协议1--SPI&#xff08;待定&#xff09; ...... 一、串口协议简介 1&#xff0c;简介 UART(异步串行通信)&#xff1a;时钟基准不是同一个&#xff08…

「Mac畅玩鸿蒙与硬件10」鸿蒙开发环境配置篇10 - 项目实战:计数器应用

本篇将通过一个简单的计数器应用,带你体验鸿蒙开发环境的实际操作流程。本项目主要练习组件的使用、事件响应和状态管理,帮助开发者熟悉基本的应用构建流程。 关键词 计数器应用组件操作事件响应状态管理HarmonyOS 应用开发一、创建计数器项目 1.1 在 DevEco Studio 中新建项…

Python | Leetcode Python题解之第513题找树左下角的值

题目&#xff1a; 题解&#xff1a; class Solution:def findBottomLeftValue(self, root: Optional[TreeNode]) -> int:q deque([root])while q:node q.popleft()if node.right:q.append(node.right)if node.left:q.append(node.left)ans node.valreturn ans

操作系统实验记录

实验零:虚拟机安装 一、安装vmware虚拟机 与vmware匹配搜索结果 - 考拉软件 (rjctx.com),下载17.5.1版本即可下载后对照教程安装 二、下载iso虚拟驱动 搜索清华大学镜像网站,点击再搜ubuntu,下载这个4.1GB的iso文件安装后打开vmware虚拟机 三、配置vmware虚拟机 右键管…

适配器模式:类适配器与对象适配器

适配器模式是一种结构性设计模式&#xff0c;旨在将一个接口转换成客户端所期望的另一种接口。它通常用于解决由于接口不兼容而导致的类之间的通信问题。适配器模式主要有两种实现方式&#xff1a;类适配器和对象适配器。下面&#xff0c;我们将详细探讨这两种方式的优缺点及适…

Python毕业设计选题:基于Python的无人超市管理系统-flask+vue

开发语言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 系统首页 超市商品详情 购物车 我的订单 管理员登录界面 管理员功能界面 用户界面 员…

CSS ——相关链接制作

文章目录 需求分析代码注意 需求 制作一个相关链接 分析 代码 html <div class"box"><div class"title"><span>相关链接</span></div><div class"links"><span><a href"https://www.baidu…

qt QComboBox详解

QComboBox是一个下拉选择框控件&#xff0c;用于从多个选项中选择一个。通过掌握QComboBox 的用法&#xff0c;你将能够在 Qt 项目中轻松添加和管理组合框组件&#xff0c;实现复杂的数据选择和交互功能。 重要方法 addItem(const QString &text)&#xff1a;将一个项目添…

哈希思想及其应用

目录 1.unordered系列容器 1.1简介 1.2接口 (只对效果进行描述&#xff0c;具体可以自行参考文档) 1.2.1构造 1.2.2容量 1.2.3迭代器 1.2.4访问 1.2.5查询 1.2.6修改 1.2.7桶操作 2.哈希 2.1概念 2.2哈希冲突 2.2.1闭散列 2.2.2开散列 2.2.2.1哈希文件 2.2.2…

C++STL详解(九)map和set的使用

一.关联式容器的介绍 CSTL包含了序列式容器和关联式容器&#xff1a; 序列式容器里面存储的是元素本身&#xff0c;其底层是线性的数据结构&#xff0c;就譬如我们之前学习的vector&#xff0c;list&#xff0c;deque等等。关联式容器里面存储的是<key,value>的键值对&…

WPF+MVVM案例实战(九)- 霓虹灯字效果控件封装实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、运行效果2、主菜单与界面实现1、主菜单2、霓虹灯字界面实现3、字体资源获取3、控件封装1.创建自定义控件2、依赖属性实现3、封装控件使用4、运行效果4、源代码获取1、运行效果 2、主菜单与界面实…

凸极式发电机的相量图分析和计算,内功率因数角和外功率因数角和功角的定义。

图1&#xff1a;同步发电机稳态相量图 若发电机为凸极式&#xff0c;由于凸极机正、交轴同步电抗不等&#xff0c;即xd≠xq&#xff0c;因此必须先借助虚构电动势 E ˙ Q E ˙ q − ( x d − x q ) I ˙ d \dot{E}_Q\dot{E}_q-(x_d-x_q)\dot{I}_d E˙Q​E˙q​−(xd​−xq​)…

基于Spring Boot的员工与部门信息管理系统:增删改查全攻略

介绍项目的搭建过程&#xff0c;包括依赖管理、数据库设计、实体类的创建、控制器的编写以及前端的简单实现。希望通过本项目的学习&#xff0c;能够加深大家对Spring Boot及相关技术的理解&#xff0c;为后续的开发奠定基础。 文章目录 前言 环境搭建 开发规范 查询部门 删除部…

Java Executor ScheduledExecutorService 源码

前言 相关系列 《Java & Executor & 目录》《Java & Executor & ScheduledExecutorService & 源码》《Java & Executor & ScheduledExecutorService & 总结》《Java & Executor & ScheduledExecutorService & 问题》 涉及内容 …

SmartX 在新能源:支撑多家头部企业 MES 等核心系统稳定运行与 VMware 替换

在过去几年中&#xff0c;中国新能源企业经历了迅猛的增长。随着电池技术、光伏发电和风电等领域的不断进步&#xff0c;新能源企业不仅面临生产能力的提升需求&#xff0c;还需要优化运营效率和管理复杂度&#xff0c;其基础设施建设则需要不断升级以适应这种快速扩展的需求&a…

最新出炉!ffmpeg视频滤镜:提取灰度图像-extractplanes

滤镜的描述 extractplanes 滤镜的官网 》 FFmpeg Filters Documentation 这个滤镜可以将视频的像素格式的各个分类分别提取出来&#xff0c;比如你的像素格式是yuv420, 通过这个滤镜可以分别将y/u/v提取出来并进行存储&#xff0c;此时存储y分量的图片&#xff0c;就是灰色…

Webserver(1.6)Linux系统IO函数

目录 open函数打开已有文件创建新文件 read和write函数lseek函数stat和lstat函数 open函数 man 2 open 打开已有文件 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <unistd.h>int main(){i…

【02基础】- RabbitMQ基础

目录 2- RabbitMQ2-1 介绍和安装安装 2-2 RabbitMQ 快速入门2-3 RabbitMQ 数据隔离 3- Java客户端3-1 快速入门AMQP快速入门&#x1f4d1;小结&#xff1a;SpringAMQP如何收发消息&#xff1f; 3-2 WorkQueues 任务模型案例-使用 WorkQueue 单队列绑定多消费者&#x1f4d1;小结…

Linux版更新流程

一.下载更新包 下载地址&#xff1a;https://www.nvisual.com/%e4%b8%8b%e8%bd%bd/ 二.更新包组成 更新包由三部分组成&#xff1a; 前端更新包&#xff1a;压缩的ZIP文件&#xff0c;例如&#xff1a;dist-2.2.26-20231227.zip (2.2.26是版本号 20231227是发布日期)后端更…