当前位置: 首页 > news >正文

代码随想录算法训练营第三十九天 | 62.不同路径、63. 不同路径 II、343. 整数拆分、96.不同的二叉搜索树

62.不同路径

题目链接:https://leetcode.cn/problems/unique-paths/
文档讲解:https://programmercarl.com/0062.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE…
视频讲解:https://www.bilibili.com/video/BV1ve4y1x7Eu/

思路

  • 确定dp数组以及下标的含义:走到第i行第j个格子有dp[i][j]种方法。
  • 确定递推公式:dp[i][j] = dp[i - 1][j] + dp[i][j - 1];因为可以往下走和往右走,所以第i行第j列的点要么是从左边来,要么是从上面来,所以是把这两个格子的方法数相加。
  • dp数组如何初始化:初始化第一行和第一列的数据,都只有一种方法可以到达,就是一直往右走或一直往下走。
  • 确定遍历顺序:dp[i][j]都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了。
  • 打印dp数组,用于debug。

代码

class Solution {public int uniquePaths(int m, int n) {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];}
}

分析:时间复杂度:O(m * n),空间复杂度:O(m * n)。

63. 不同路径 II

题目链接:https://leetcode.cn/problems/unique-paths-ii/
文档讲解:https://programmercarl.com/0063.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE…
视频讲解:https://www.bilibili.com/video/BV1Ld4y1k7c6/

思路

  • 确定dp数组以及下标的含义:走到第i行第j个格子有dp[i][j]种方法。
  • 确定递推公式:dp[i][j] = dp[i - 1][j] + dp[i][j - 1];因为可以往下走和往右走,所以第i行第j列的点要么是从左边来,要么是从上面来,所以是把这两个格子的方法数相加。但如果这一格有障碍,就为0。
  • dp数组如何初始化:本题和上面一道题不以言大哥地方在于本体有障碍,那么初始化的时候,如果遇到了障碍,后面的格子就不可达,为0。
  • 确定遍历顺序:dp[i][j]都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了。
  • 打印dp数组,用于debug。

代码

class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {int m = obstacleGrid.length, n = obstacleGrid[0].length;int[][] dp = new int[m][n];for (int i = 0; i < m && obstacleGrid[i][0] == 0; i++) dp[i][0] = 1;for (int i = 0; i < n && obstacleGrid[0][i] == 0; i++) 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] = dp[i][j - 1] + dp[i - 1][j];}}}return dp[m - 1][n - 1];}
}

分析:时间复杂度:O(),空间复杂度:O()。

343. 整数拆分

题目链接:https://leetcode.cn/problems/integer-break/
文档讲解:https://programmercarl.com/0343.%E6%95%B4%E6%95%B0%E6%8B%86%E5%88%86.html
视频讲解:https://www.bilibili.com/video/BV1Mg411q7YJ/

思路

  • 确定dp数组以及下标的含义:分拆数字i,可以得到的最大乘积为dp[i]
  • 确定递推公式:从1遍历j,然后有两种渠道得到dp[i]
    • 一个是j * (i - j) 直接相乘。
    • 一个是j * dp[i - j],相当于是拆分(i - j)。
    • 最后递推公式为dp[i] = Math.max(j * (i - j), Math.max(j * dp[i - j], dp[i]));
    • 在j循环的过程中,会多次计算dp[i],取最大的。
  • dp数组如何初始化:dp[0]dp[1]其实是没有意义的,就初始化为0。
dp[0] = 0;
dp[1] = 0;
dp[2] = 1;
  • 确定遍历顺序:从前向后遍历。
  • 打印dp数组,用于debug

代码

class Solution {public int integerBreak(int n) {int[] dp = new int[n + 1];dp[0] = 0;dp[1] = 0;dp[2] = 1;for (int i = 3; i <= n; i++) {for (int j = 1; j <= i / 2; j++) { // 要拆分成近似相等的数,j大于i的情况就不考虑了dp[i] = Math.max(j * (i - j), Math.max(j * dp[i - j], dp[i]));}}return dp[n];}
}

分析:时间复杂度:O(n2),空间复杂度:O(n)。

96.不同的二叉搜索树

题目链接:https://leetcode.cn/problems/unique-binary-search-trees/
文档讲解:https://programmercarl.com/0096.%E4%B8%8D%E5%90%8C%E7%9A%84%E4%BA%8C%E5%8F%89%E6%90%9C%E7…
视频讲解:https://www.bilibili.com/video/BV1eK411o7QA/

思路

  • 确定dp数组以及下标的含义:有i个节点的二叉搜索树有dp[i]中不同的形状。
  • 确定递推公式:确定一个根节点后,这个二叉树的形状数由左右子树形状数量相乘决定,即dp[i] += dp[j] * dp[i - j - 1];
  • dp数组如何初始化:dp[0] = 1; dp[1] = 1;,0个节点也算一种形状。
  • 确定遍历顺序:从前往后遍历。
  • 打印dp数组,用于debug

代码

class Solution {public int numTrees(int n) {int[] dp = new int[n + 1];dp[0] = 1;dp[1] = 1;for (int i = 2; i < dp.length; i++) {for (int j = 0; j < i; j++) {dp[i] += dp[j] * dp[i - j - 1];}}return dp[n];}
}

分析:时间复杂度:O(n2),空间复杂度:O(n)。

相关文章:

代码随想录算法训练营第三十九天 | 62.不同路径、63. 不同路径 II、343. 整数拆分、96.不同的二叉搜索树

62.不同路径 题目链接&#xff1a;https://leetcode.cn/problems/unique-paths/ 文档讲解&#xff1a;https://programmercarl.com/0062.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE… 视频讲解&#xff1a;https://www.bilibili.com/video/BV1ve4y1x7Eu/ 思路 确定dp数组以及下标的含…...

C/C++函数指针、C#委托是什么?

函数指针 #include<stdio.h>//声明函数指针 typedef int(*Calc)(int a, int b); int Add(int a, int b) {return a b; } int Sub(int a, int b) {return a - b; }int main() {Calc funcPoint1 &Add;Calc funcPoint2 &Sub;int x 120;int y 140;int z 0;z …...

红队攻防渗透技术实战流程:组件安全:JacksonFastJsonXStream

红队攻防渗透实战 1. 组件安全1.1 J2EE-组件Jackson-本地demo&CVE1.1.1 代码执行 (CVE-2020-8840)1.1.2 代码执行(CVE-2020-35728)1.2 J2EE-组件FastJson-本地demo&CVE1.2.1 FastJson <= 1.2.241.2.2 FastJson <= 1.2.471.2.3 FastJson <= 1.2.801.3 J2EE-组…...

Perl 语言学习进阶

一、如何深入 要深入学习Perl语言的库和框架&#xff0c;可以按照以下步骤进行&#xff1a; 了解Perl的核心模块&#xff1a;Perl有许多核心模块&#xff0c;它们提供了许多常用的功能。了解这些模块的功能和用法是深入学习Perl的第一步。一些常用的核心模块包括&#xff1a;S…...

LangGraph实战:从零分阶打造人工智能航空客服助手

❝ 通过本指南&#xff0c;你将学习构建一个专为航空公司设计的客服助手&#xff0c;它将协助用户查询旅行信息并规划行程。在此过程中&#xff0c;你将掌握如何利用LangGraph的中断机制、检查点技术以及更为复杂的状态管理功能&#xff0c;来优化你的助手工具&#xff0c;同时…...

R可视化:R语言基础图形合集

R语言基础图形合集 欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 基础图形可视化 数据分析的图形可视化是了解数据分布、波动和相关性等属性必…...

mysql导入sql文件失败及解决措施

1.报错找不到表 1.1 原因 表格创建失败&#xff0c;编码问题mysql8相较于mysql5出现了新的编码集 1.2解决办法&#xff1a; 使用vscode打开sql文件ctrlh&#xff0c;批量替换&#xff0c;替换到你所安装mysql支持的编码集。 2.timestmp没有设置默认值 Error occured at:20…...

JS:获取鼠标点击位置

一、获取鼠标在目标元素中的点击位置 getClickPos.ts: export const getClickPos (e: MouseEvent) > {return {x: e.offsetX,y: e.offsetY,}; };二、获取鼠标在页面中的点击位置 getClickPos.ts: export const getPageClickPos (e: MouseEvent) > {return {x: e.pa…...

使用开源的zip.cpp和unzip.cpp实现压缩包的创建与解压(附源码)

目录 1、使用场景 2、压缩包的创建 3、压缩包的解压 4、CloseZipZ和CloseZipU两接口的区别...

npm 异常:peer eslint@“>=1.6.0 <7.0.0“ from eslint-loader@2.2.1

node 用16版本 npm install npm6.14.15 -g将版本降级到6...

Docker|了解容器镜像层(2)

引言 容器非常神奇。它们允许简单的进程表现得像虚拟机。在这种优雅的底层是一组模式和实践&#xff0c;最终使一切运作起来。在设计的根本是层。层是存储和分发容器化文件系统内容的基本方式。这种设计既出人意料地简单&#xff0c;同时又非常强大。在今天的帖子[1]中&#xf…...

使用Python爬取temu商品与评论信息

【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与开发工作&#xff01; 【&…...

mybatis学习--自定义映射resultMap

1.1、resultMap处理字段和属性的映射关系 如果字段名和实体类中的属性名不一致的情况下&#xff0c;可以通过resultMap设置自定义映射。 常规写法 /***根据id查询员工信息* param empId* return*/ Emp getEmpByEmpId(Param("empId") Integer empId);<select id…...

Elasticsearch之写入原理以及调优

1、ES 的写入过程 1.1 ES支持四种对文档的数据写操作 create&#xff1a;如果在PUT数据的时候当前数据已经存在&#xff0c;则数据会被覆盖&#xff0c;如果在PUT的时候加上操作类型create&#xff0c;此时如果数据已存在则会返回失败&#xff0c;因为已经强制指定了操作类型…...

python中装饰器的用法

最近发现装饰器是一个非常有意思的东西&#xff0c;很高级&#xff01; 允许你在不修改函数或类的源代码的情况下&#xff0c;为它们添加额外的功能或修改它们的行为。装饰器本质上是一个接受函数作为参数的可调用对象&#xff08;通常是函数或类&#xff09;&#xff0c;并返…...

php实现一个简单的MySQL分页

一、案例演示&#xff1a; 二、php 代码 <?php $servername "localhost"; // MySQL服务器名称或IP地址 $username "root"; // MySQL用户名 $password "123456"; // MySQL密码 $dbname "test"; // 要连接…...

算法训练营day23补签

题目1&#xff1a;530. 二叉搜索树的最小绝对差 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int reslut INT_MAX;TreeNode* pre NULL;void trackingback(TreeNode* node) {if(node NULL) return;trackingback(node->left);if(pre ! NULL) {reslut…...

国密SM2JS加密后端解密

1.前端加密 前端加密开源库 sm-crypto 1.1 传统web,下载 sm-crypto 进行打包为 dist/sm2.js 相关打包命令 npm install --save sm-crypto npm install npm run prepublish在web页面引用打包后的文件 <script type"text/javascript" src"<%path %>…...

Cheat Engine.exe修改植物大战僵尸阳光与冷却

Cheat Engine.exe修改植物大战僵尸阳光与冷却 打开Cheat Engine.exe和植物大战僵尸&#xff0c;点CE中文件下面红框位置&#xff0c;选择植物大战僵尸&#xff0c;点击打开 修改冷却&#xff1a; 等冷却完毕&#xff0c;首次扫描0安放植物&#xff0c;再次扫描变动值等冷却完…...

python内置模块之queue(队列)用法

queue是python3的内置模块&#xff0c;创建堆栈队列&#xff0c;用来处理多线程通信&#xff0c;队列对象构造方法如下&#xff1a; queue.Queue(maxsize0) 是先进先出&#xff08;First In First Out: FIFO&#xff09;队列。 入参 maxsize 是一个整数&#xff0c;用于设置…...

Swin2SR惊艳效果展示:低清草稿图秒变4K高清作品集

Swin2SR惊艳效果展示&#xff1a;低清草稿图秒变4K高清作品集 你有没有遇到过这种情况&#xff1f;一张特别有感觉的AI生成图&#xff0c;可惜分辨率太低&#xff0c;放大后全是马赛克&#xff1b;一张珍贵的旧照片&#xff0c;像素模糊得看不清人脸&#xff1b;或者从网上找到…...

OpenClaw跨平台部署:nanobot镜像在mac/Windows双系统实测

OpenClaw跨平台部署&#xff1a;nanobot镜像在mac/Windows双系统实测 1. 为什么选择nanobot镜像 第一次听说nanobot这个轻量级OpenClaw镜像时&#xff0c;我正被本地部署大模型的资源消耗问题困扰。作为一个经常在macOS和Windows双系统切换的开发者&#xff0c;我需要一个能在…...

效率提升:基于快马平台快速集成openclaw开发局域网协作工具

最近在团队协作开发中遇到了一个痛点&#xff1a;每次新成员加入局域网时&#xff0c;都需要手动配置设备信息才能互相访问&#xff0c;文件共享和实时沟通也依赖第三方工具&#xff0c;效率很低。于是尝试用openclaw结合InsCode(快马)平台快速搭建了一套本地化协作工具&#x…...

抖音视频批量下载器:如何快速高效地收集和管理海量抖音内容

抖音视频批量下载器&#xff1a;如何快速高效地收集和管理海量抖音内容 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 抖音作为国内最大的短视频平台&#xff0c;每天产生数以百万计的视频内容&#xff0c;…...

【AI+教育】AI总犯“金鱼记忆”?揭秘大模型长期记忆架构,让它真正记住你!

在和AI对话时,你是否有过这样的抓狂时刻:前脚刚告诉它“我叫小明,我不吃香蕉”,五分钟后它又热情地向你推荐香蕉饼? 目前的多数大语言模型就像拥有“金鱼记忆”,一刷新就忘得一干二净。为了让智能体(Agent)能像真正的老朋友一样懂你,我们设计了一套长期记忆功能模块。…...

VMware ESXi 上玩转 SmartX 超融合社区版:OVF 镜像部署全攻略(含网络配置避坑指南)

VMware ESXi 上部署 SmartX 超融合社区版&#xff1a;OVF 镜像实战指南 虚拟化管理员们常常面临一个现实困境&#xff1a;如何在有限的硬件资源下快速体验企业级超融合架构&#xff1f;SmartX 超融合社区版通过 OVF 镜像部署方案&#xff0c;为 VMware ESXi 环境提供了轻量级验…...

VSCode里藏着的绘图神器:Live Preview搭配Mermaid插件,边写代码边出图真香了

VSCode绘图革命&#xff1a;用Mermaid实现代码与图表无缝协同 在IDE里切换窗口查看流程图的日子该结束了。作为每天与代码打交道的开发者&#xff0c;我们早已厌倦了在Visio、ProcessOn和代码编辑器之间反复横跳的繁琐操作。Mermaid语法配合VSCode的实时预览功能&#xff0c;正…...

ES启动失败:深入解析No buffer space available错误及连接数优化策略

1. 当ES启动失败时发生了什么 第一次看到"No buffer space available"这个报错时&#xff0c;我也是一头雾水。那天凌晨三点&#xff0c;线上监控突然报警&#xff0c;ES集群集体罢工&#xff0c;整个搜索服务直接瘫痪。查看日志发现满屏都是"java.net.SocketE…...

LibreHardwareMonitor:5分钟掌握免费开源硬件监控的终极指南

LibreHardwareMonitor&#xff1a;5分钟掌握免费开源硬件监控的终极指南 【免费下载链接】LibreHardwareMonitor Libre Hardware Monitor, home of the fork of Open Hardware Monitor 项目地址: https://gitcode.com/GitHub_Trending/li/LibreHardwareMonitor 想要实时…...

Miniconda环境迁移实战:如何将CentOS装好的Python环境打包到其他服务器?

Miniconda环境迁移实战&#xff1a;跨服务器Python环境无缝转移指南 当你在CentOS服务器上精心配置了一个完美的Python数据分析环境&#xff0c;却需要在另一台服务器上复现时&#xff0c;难道要重新经历一遍繁琐的安装过程&#xff1f;本文将揭示两种高效可靠的Miniconda环境迁…...