自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 专题六:记忆化搜索(递归优化的秘密武器)

首先我们要先理解递归的解法:也就是右边那个递归展开图,不难发现递归时间复杂度很大O(2^N)我们发现d(3)的展开左边和右边是一样的,此时是不是可以想方法当左边递归下去返回d(3)时把d(3)的结果记住,也就是充当备忘录的身份(这个备忘录可以是一个数组/哈希表等)记住了当右边递归下去时,发现需要用d(3),而备忘录当中又有d(3),就不用在展开,直接用时间复杂度就会减小,这种方法就叫记忆化搜索,(带备忘录的递归)。

2025-05-20 14:49:54 560

原创 专题五:floodfill算法(扫雷游戏精讲)

M表示:未挖出的地雷E表示:未挖出的空白方块什么叫未挖出,就是你没玩的时候,棋盘是什么样的,就是你站在上帝视角看待棋盘B:表示挖出来是空白的,如果是空白的要延伸到有数字的才会停止1~8是如果你周围有地雷,当你挖出来时就显示周围的地雷数X:表示挖出来的地雷,如果挖出来是地雷就用X表示,并且游戏结束看示例:一开始点了左下角,左下角是空白就用B表示,知道遇到数字就停返回:当你点一次,返回棋盘的结果算法原理分析:其实本质就是一道深度搜索的题目。

2025-05-19 23:14:49 92

原创 专题五:floodfill算法(太平洋大西洋水流问题)

整张图,左边深蓝的是太平洋,右边浅蓝的是大西洋,你需要在矩阵中找到一个点,使其可以流向太平洋又可以流向大西洋,并且你每次流的时候只能由高到低,或者相等到相等。

2025-05-19 18:17:07 224

原创 专题五:floodfill算法(图像渲染深度优先遍历解析与实现)

给一个初始坐标(sr,sc)比如示例中的粉色的1,如果周围上下左右都是1,就是连通块(性质相同的地方),把它涂上颜色(2)即可,右下角不算,因为不算对角线的。

2025-05-19 10:45:33 323

原创 FloodFill算法:洪水般的图像处理艺术

Flood Fill 是一种简单但强大的算法,核心在于。

2025-05-18 18:23:28 436

原创 专题四:综合练习(最经典的回溯题之N皇后详解)

下过国际象棋的都知道,皇后可以在它所在的行,所在的列,还有所在的斜线进行移动这道题就是给n个皇后,nxn的棋盘,让这n个皇后不能互相吃彼此。

2025-05-18 11:43:08 278

原创 专题四:综合练习(组合总和的暴搜dfs)

以leetcode39题为例。

2025-05-17 16:43:03 191

原创 专题四:综合练习(组合问题的决策树与回溯算法)

以leetode77题为例。

2025-05-17 15:30:20 322

原创 专题四:综合练习(括号组合算法深度解析)

给一个数字n,返回合法的所有的括号组合。

2025-05-17 14:51:59 428

原创 专题四:综合练习(全排列去重算法解析)

在全排列的基础上去除掉重复的元素。

2025-05-17 12:10:13 305

原创 专题四:综合练习( 找出所有子集的异或总和再求和)

找到每个子集,然后子集中的元素异或之后全部相加。

2025-05-13 22:30:31 600

原创 专题三:穷举vs暴搜vs深搜vs回溯vs剪枝(全排列)决策树与递归实现详解

给一个数组,列出它的全排列。

2025-05-13 18:09:41 1014

原创 专题二:二叉树的深度搜素(二叉树的所有路径)重点理解回溯算法的”恢复现场“

全局变量的path:需要我们手动恢复现场(需要掌握,因为难题中会用到这种方法)函数头的path:函数自动帮我们完成恢复现场 (难题不易设计函数头)代码编写:回溯的恢复现场在哪???//这一句完之后就回溯了而且你没有改变这一层的path,这一层的path还是原来那个path你传进去的那个path进去之后是下一层的,你回退到这一层根本没有改变函数自动帮我们恢复现场了注意这里不要加&(引用)引用就类似全局变量;

2025-05-13 16:55:53 436

原创 专题二:二叉树的深度搜索(验证二叉搜索树)

左结点小于根结点,右结点大于根节点。

2025-05-13 15:46:08 263

原创 专题二:二叉树的深度搜索(二叉树剪枝)

也就是当你的子树全为0的时候就可以剪掉。

2025-05-12 23:25:48 350

原创 专题二:二叉树的深度搜索(求根节点到叶节点数字之和)

从根到叶子结点的一条路径组成的数字,所有数字加在一起返回。

2025-05-12 22:33:32 457

原创 专题二:二叉树的深度优先搜索

以leetcode2331题为例。

2025-05-12 21:15:24 308

原创 专题一:汉诺塔问题:递归算法的精妙解析

请先看我的回溯算法的第一篇文章以leetcode汉诺塔问题讲解。

2025-05-11 13:45:10 364

原创 回溯算法:深度优先搜索的终极指南

关于二叉树的遍历:这里讲解后序遍历,左右根,当我们遍历一个结点时,先考虑左子树,右子树,根,遍历左子树时,又把左子树看成根节点,在左右根,依次递归下去。我们在研究主问题时,发现子问题也是相同的,如果设解决主问题需要用到函数f,解决相同的子问题也会用到f,因为他们是相同的问题,此时就会出现。以走迷宫为例:每走到一个拐点,都可以分左右,那我第一个往左走,发现行不通,就回到上一级的这个操作就称之为回溯,然后在由上一级往另一边走。在归并那里,就是一个数组,然后标记一下数组的左边和右边,完成数组的排序。

2025-05-11 11:56:46 963

原创 动态规划之二维费用的背包问题解析

给一个m和一个n,m表示最多有多少个0,n表示最多有多少个1,选出来的子集,记录0和1的个数,在不超过的情况下能选的最大子集,也就是能选多少个元素从这里,如果观察敏锐的话,可以发现这是一个背包问题,就是选一堆东西,不能超过巴拉巴拉但这里是有两个背包,也就是m和n,所以这就叫二维背包问题就是由原来的一个体积限制,到现在的体积和重量限制m和n就是两个限制。

2025-05-10 19:39:14 338

原创 动态规划之完全背包问题

牛客网例题为例,由于 leetcode没有经典例题可以讲解,牛客网这道可以当作模板题。

2025-05-10 16:19:35 346

原创 动态规划之背包问题(分割等和子集问题)

给一个正整数的数组,让你分隔成两个相等的数组通过观察,我们可以发现,总和是一定的,也就是sum,把sum分成两部分,每部分都是sun/2转换为01背包问题,每个元素都是0或1,挑出的元素总和是sun/2,剩下的那部分就是sum/2了。

2025-05-10 11:57:20 285

原创 动态规划之背包问题:组合优化中的经典NP挑战

背包问题是一种经典的组合优化的NP问题,在计算机科学、运筹学等领域有着广泛的应用。问题可以简单的描述为:假设有一个容量为C的背包和n个物品,每个物品i都有重量w[i]和价值v[i]。目标是选择一些物品放入背包,使得放入背包的物品总价值最大,同时背包中物品的总重量不能超过背包的容量。这里先简单介绍两种背包问题:1.01背包:也就是你物品的个数是1个,你拿了就剩0个,没拿就剩1个2.完全背包:物品个数无数个,可以拿0/1/2/3/4至无穷多个背包也可以分两种:1.背包不需要装满。2.背包必须装满。

2025-05-09 22:20:52 1730

原创 动态规划之两个数组的dp问题(最长公共子序列)

1.子序列2.公共子序列的最长长度。

2025-05-08 16:39:02 409

原创 动态规划之回文串问题

为什么我们要学习动态规划处理回文子串原因在于我们能够将所有的子串是否是回文的信息储存在dp表里面。

2025-05-07 15:19:20 379

原创 STL之stack&&queue

1.栈是没有迭代器的,因为栈的特性是先进后出,不能随便访问,所以不支持迭代器2.如何遍历?先判断为不为空,不为就取栈顶的数据,取完之后pop就行3.为什么没有析构函数?因为它底层是别的容器,当stack出了作用域自动销毁时会调底层容器的析构函数1.队列是一种容器适配器,专门用于在FIFO(先进先出)中操作,其中从容器的一段插入元素,另一端提取元素2.队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素,元素从队尾入队列,从对头出队列。

2025-05-06 21:30:36 1132

原创 动态规划之子序列问题1

以leetcode300题为例此题最为经典,所有的算法书在讲子序列问题时都以这个为模板题,后面的题可以按照此题的分析方法进行分析。

2025-05-05 17:40:58 380

原创 动态规划之最大子数组(环形数组)

第二种就是你可能前面一部分和后面一部分成环了,你求的是最大,那里面就剩最小。无非就两种情况,一个是你在普通数组的情况下能求最大值,也就是你没有成环。环形数组也就是在普通数组上的变形。

2025-05-04 16:05:43 101

原创 动态规划之子数组系列

2025-05-04 15:39:28 90

原创 动态规划之多状态问题(股票买卖利润最大)

股票买入后不能在买,也就是必须买入后卖出才能买一次交易叫买卖,这样的交易次数不能超过两次返回最大利润。

2025-05-04 12:31:59 589

原创 动态规划之多状态问题1

也就是给一个预约数组,选择一些数字,让其总和最大,但不能选择相邻的两个数字。

2025-05-03 18:49:18 284

原创 动态规划之路劲问题3

dp[i][j]:表示到达这个位置时的最少的健康点数,如果我们以这个表示我们的状态,就会发现有问题,因为这个ij位置的健康点数不仅仅受下一步(也就是往右和往下)的影响,还受后面很多个路径上的点的影响,比如以例题为例:一开始我们如果初始值为3,走完-2还剩1,那我们走不出-3和-5,如果我们初始值为6,走完-2,-3,3,1,但是到-5时变为0,所以初始值为7才是对的,所以我们ij位置不仅仅是受最近的i j-1和i-1 j位置影响,还受多个位置的值影响。以dp[i][j]为结尾,最少的健康点数。

2025-05-03 17:56:01 424

原创 动态规划之路径2

2025-05-03 16:06:21 168

原创 STL之list容器

1.list的底层是双向链表结构,双向链表中的每个元素在互不相关的独立结点中,在结点中通过指针指向前一个元素和后一个元素2.list是可以在常数范围内在任意位置的插入和删除的序列式容器,并且该容器可以前后双向迭代3.vector的优点:支持随机访问,间接的就支持了排序/二分查找/堆排序等缺点:1.头部和中部的插入效率低,需要挪动数据2.插入数据空间不够需要增容,增容需要开新空间,拷贝数据,释放旧空间list的优点:没有增容代价,且任意位置插入都是0(1);

2025-05-03 12:25:01 1459

原创 动态规划之路径问题1

leetcode62:不同路径。

2025-05-02 14:23:07 321

原创 STL之vector容器

1.vector是可变大小数组的容器2.像数组一样,采用连续的空间存储,也就意味着可以通过下标去访问,但它的大小可以动态改变3.每次的插入都要开空间吗?开空间就要意味着先开临时空间,然后在拷贝旧的到新的上面,在释放原来的,就时间而言,这是一个相对代价很高的任务;显然这是不行的,vector的分配策略:会分配一些而外的空间以适应可能的增长,例如我们平时说的以1.5或者2倍的方式增容,不同的库选择不同的策略权衡空间的使用和重新分配,以至于在插入一个元素时能在常数时间内插入;

2025-05-02 13:41:05 1289

原创 动态规划简单题2

leetcode91题(解码方法)

2025-05-01 21:55:16 387

原创 动态规划简单题

以leetcode746(使用最小花费楼梯)进一步巩固动态规划答题步骤。

2025-05-01 18:56:21 400

原创 动态规划引入

动态规划的题目大致解决方法都可以按照如上的思路进行。

2025-05-01 17:29:19 541

原创 STL之string容器

c_str():返回c格式的字符串 (在string类中是以size表示有效大小,c风格是以\0表示结束,返回c格式的字符串是在末尾加\0,而string在处理字符串是没有\0结尾表示结束,而是用size)在c语言中,字符串以"\0"结尾的一些字符的集合,并且提供了一系列的str函数,但有时候可能会越界访问,且库函数是与字符串分离的,不太符合OOP的思想,为了方便管理,c++封装了一个类。size():返回字符串的有效长度(一般用这个,length比较早期,size是与其他容器统一)

2025-05-01 12:55:50 1030

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除