自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法通关村——盘点图的常见概念问题

在无向图中,如果任意两个节点都存在路径相连,则称图是连通图。在有向图中,如果对于每一对节点,都存在双向路径,则称为强连通图。与节点相连的边的数量。对于有向图,分为入度(In-Degree)和出度(Out-Degree)。从一个顶点到另一顶点途经的所有顶点组成的序列。在一个路径上,开头和结尾是一个节点,称之为环。

2023-12-14 14:14:30 125

原创 算法通关村——透彻理解动态规划

首先确定状态,由于n是多个平方数之和,所以最后一个和数肯定是平方数,所以求n-j^2最少被分为几个平方数之和是子问题。由此得到状态:设f[i]表示i最少被分为几个平方数之和。最后确定初始状态和边界条件,f[0]=0,因为0是0个平方数之和;结果需要计算f[n]。接着确定状态方程f[i]=f[i-j^2] + 1(1 <= j^2 <= i)LeetCode279.给你一个整数 n ,返回和为n的完全平方数的最少数量。

2023-12-13 15:53:23 128

原创 算法通关村——透彻理解动态规划

比如从地点A到地点B是怎么走的?从地点A到地点B有几条路径可走?(4)按照从小到大的顺序计算:f(0)、f(1)、f(2)……2、DP能解决的问题具有什么特点?答:只关心结果而不关心得到结果的过程。答:(1)枚举出某个位置所有的可能性。而一般情况下,一般都是分析最后一步。(5)最后看数组哪个位置是我们想要的结果。1、DP能解决什么问题?答:一般都是找值的问题。(3)确定初始状态和考虑边界问题。(2)确定数组要存储什么内容。

2023-12-09 12:49:48 125

原创 算法通关村——回溯模板如何解决括号生成问题

LeetCode22.数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。输出:["((()))","(()())","(())()","()(())","()()()"]那停止回溯的条件就很简单了,当所有括号都添加到集合里的时候就停止回溯。也就是集合的长度等于2n。根据例子我们可以知道“(”是一定先出现的,而“)”只要“(”出现一次就可以开始添加到集合里去,那么代码就很容易写出来了,代码如下。

2023-12-08 12:40:03 109

原创 算法通关村——回溯模板如何解决子集问题

LeetCode78,给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]求子集问题只需要遍历该集合抽象成的树即可(如下图)输入:nums = [1,2,3]

2023-12-07 11:32:33 66

原创 算法通关村——透析回溯的模板

但是还是有所区别,回溯的模板比N叉树的遍历过程多了一个手动撤回的操作,正好对应了回溯里如果发现状态不对就退回到上一个状态的思想。LeetCode77 :给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。回溯的基本思想是从一个初始状态开始,按照一定的规则向前探索,寻找问题的解。如果发现状态不对或者无法达到目标就会退回到上一个状态,重新选择另一种可能。最后就放一个经典题目,来看看回溯思想落在实战中长什么样。这代码和N叉树的遍历过程是极其相似的。

2023-12-04 15:25:59 71

原创 算法通关村——盘点面试大热门之区间问题

拿LeetCode252.来说,这道题目叫我们在包含有一堆会议时间的数组里判断是否有重复区间,那我们只要比较一个会议的开始时间和上一个会议的结束时间就OK了。如果前者<后者,那么就返回true,否则就返回false。设两个区间为分别为A和B,当A区间首部大于B区间首部并且小于或者等于B区间的尾部时,我们就可以判断AB两区间有重复的地方。常见的区间问题大多都是要寻找区间重复的地方在哪里,我们来看下面这张图。

2023-12-02 11:53:31 84

原创 算法通关村——原来贪心如此简单

贪心算法简单来说就是选择目前最短最优的选项,比如LeetCode455的分发饼干,这里我们可以先把大饼干给大胃口的孩子吃,然后小饼干再给小胃口的孩子吃。

2023-11-29 17:49:15 105

原创 算法通关村——滑动窗口高频问题

LeetCode11.给定一个长度为 n 的整数数组 height。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。3、通过用i和j对数组进行循环,i或j每向内移动一次就更新一次最大面积,直到i和j相遇。2、由此可以得到面积公式S(i,j)=min(h[i],h[j])×(j−i)1、首先我们要用两个指针i和j来分别表示容器的左端和右端。

2023-11-26 11:56:11 78

原创 算法通关村——原来滑动窗口如此简单

滑动窗口的原理:利用两个指针在数据结构上移动,形成一个窗口,可大可小,通常还会向一个方向移动。

2023-11-24 09:18:08 196

原创 算法通关村——海量数据场景的处理方法

当数据太大无法一次性加载到内存时,使用外排序方法。:对分解后的小数据集合使用Hash表进行统计分析。:使用快速排序、堆排序和归并排序对数据进行排序。:将大数据集合分为小数据集合进行处理。

2023-11-22 12:05:44 159

原创 算法通关村——位运算在查找重复元素中的妙用

这个时候我们就可以叫位运算帮忙了,位运算的原理是:因为一个整数有32位,我们可以用每一位来代表该数字是否存在,用1来代表存在,0则是不存在。题目要求:给定一个数组,包含从1到N的整数,N最大为32000,数组可能还有重复值,且N的取值不定,若只有4KB的内存可用,该如何打印数组中所有重复元素。在需要存储大量数字的场景下,相比直接用数组储存,位运算可以帮助减少储存的空间,例如这里有一道题:如何用4KB内存寻找重复元素。

2023-11-21 14:52:29 230

原创 算法通关村——解析堆在寻找第k大的应用

3、然后从第k个元素开始和堆顶比较,比堆顶小的丢掉;比堆顶大的,移除堆顶元素,将新来的元素放入堆中,一直遍历到剩下的元素都比较了结束。1、我们可以用优先队列(PriorityQueue)建立一个找大小为k的最小堆。就拿力扣215题 数组中的第K个最大元素来说。4、此时的堆顶就是我们要的第k大的元素。2、将数组中的前k个元素都放入最小堆。

2023-11-18 11:29:27 248

原创 算法通关村——原来这就是堆

堆可以分为最大堆和最小堆,最大堆的根节点的值是最大的,最小堆的根节点的值是最小的。堆是一种特殊的完全二叉树,它的每个节点的值都不大于或不小于其子节点的值。堆的构造过程就是将一个无序的数组转化为一个满足堆性质的数组的过程。

2023-11-16 13:10:40 304

原创 算法通关村——字符串相加问题解析

2、将每一次相加的结果(除去进位)都依次放入StringBuilder类型的ans里面。1、我们要先拿到每个字符串的最后一位进行相加,并且拿一个变量用来储存进位。3、将ans翻转并且转换为String类型就是我们要的结果。

2023-11-15 14:07:29 351

原创 算法通关村—进制问题处理模板

2、然后用一个StringBuffer变量储存【数字%n】的结果。4、最后再把符号添加上去就是该n进制下的数字了。1、首先处理符号问题,将数字都变为正数。3、然后将这个结果反转。

2023-11-14 17:31:53 270

原创 算法通关村——不简单的字符串转换问题

1、首先要去除字符串里的空格,这就需要我们拿到字符串的长度并且把字符串转化为char类型的数组,再利用一个下标遍历整个数组并且去除空格。2、接着是判断正负号,我们用sign来标记最后的整数是负号还是正号,也是用遍历数组找到正负号,正号sign为1,负号sign为-1。4、最后就是注意数字溢出,新建一个放数字的变量res,边遍历数组边把获取到的数字移到res上。3、如果整个字符串都没有数字则返回0。

2023-11-14 16:34:59 264

原创 算法通关村——仅仅反转字母问题解析

2、然后由于字符串操作频繁,我们可以用一个StringBuilder来储存反转后的结果。1、我们可以用一个栈,将所有字母推入进去,等会儿出栈字母就已经达到反转字母的效果了。题目是力扣的917题目,叫我们只反转字符串里的字母。3、最后再转换为String类型即可。

2023-11-12 15:19:31 345

原创 算法通关村——颠倒二进制位

2、将二进制位数字的最后一位取出来放到新字符串的第一位,倒数第两位放到新字符串的第二位,依次循环,直到n等于0结束循环。1、建立一个新的字符串来保存颠倒后的二进制位数字。3、最后拿到的新字符串就是我们要的结果了。

2023-11-10 15:07:45 304

原创 算法通关村——位运算的常见性质

●分配律:(a & b) ∣ c=(a ∣ c) & (b ∣ c),(a ∣ b) & c=(a & c) ∣ (b & c),(a⊕b) & c=(a & c)⊕(b & c);●结合律:(a & b) & c=a & (b & c),(a ∣ b) ∣ c=a ∣ (b ∣ c),(a⊕b)⊕c=a⊕(b⊕c);●德摩根律:∼(a & b)=(∼a) ∣ (∼b),∼(a ∣ b)=(∼a) & (∼b);●交换律:a & b=b & a,a ∣ b=b ∣ a,a⊕b=b⊕a;

2023-11-10 12:38:55 395

原创 《算法通关村——二分查找在求平方根中的应用》

其中r/mid代表的是被开根号后的数,也是我们要的结果;当这个结果在中位数的左边的时候(也就是r/mid < mid),我们就要把搜索范围的右边(r)移到为中位数的左边一位数字(mid - 1),反之亦然。

2023-11-07 11:46:50 430

原创 算法通关村——透彻理解二分查找

【代码】算法通关村——透彻理解二分查找。

2023-11-06 10:57:38 459

原创 算法通关村—轻松搞定二叉树最大深度问题

3、将这两种深度比较拿到最大值后的数再加一就是这颗二叉树的最大深度了。2、利用递归拿到左子节点和右字节点的深度。1、判断root为空的情况。

2023-11-05 15:25:01 491

原创 算法通关村—轻松搞定翻转二叉树

【代码】算法通关村—轻松搞定翻转二叉树。

2023-11-04 11:05:31 413

原创 算法通关村—迭代实现二叉树的前序遍历

4、然后每推出一个栈顶元素就遍历该元素的右子节点 并且放入栈和链表里。3、遍历根节点和左子节点并且都放入链表和栈里。1、首先建立一个栈和链表。2、判断root为空。

2023-11-03 12:42:37 521

原创 《算法通关村—二叉树的层序遍历原来如此简单》

2、处理二叉树为空的情况,如果不为空则把二叉树的所有元素放入队列里。6、将每次循环的临时列表中的元素放入最开始建立的列表里。3、建立一个临时列表并获取每一层的长度进行遍历。4、将每一层的元素放入临时列表里。5、若左右子树不为空则放入队列中。1、首先建立一个队列和列表。

2023-11-02 14:22:57 463

原创 算法通关村—如何使用中序和后序来恢复一颗二叉树

(3)再看中序,2的左节点包含【3 4 8 6 7 5 】而没有右节点,9的左节点只有10,而右节点包含。左节点包含【3 4 8 6 7 5 2 】,右节点包含【10 9 11 15 13 14 12】(1)由于中序和后序的遍历方式分别是左终右和左右终,所以这颗的二叉树根节点为1,中序:3 4 8 6 7 5 2 1 10 9 11 15 13 14 12。(2)接着根节点的子节点根据后序列表可以得到为2(左)和9(右)(4)重复(2)(3)顺序,也就是后序看根、中序看左右。

2023-10-30 11:40:35 550

原创 算法通关村—用队列实现栈问题解析

【代码】算法通关村—用队列实现栈问题解析。

2023-10-29 10:47:05 578

原创 算法通关村—Hash碰撞问题解析

解决碰撞的方法有开放定址法(Java中的Treadlocal)、链地址法(Java中的ConcurrentHashMap)、再哈希法(布隆过滤器)、建立公共溢出区。而链地址法是将每个单元作为链表的头节点,一旦发生了碰撞就把该关键字链放在该单元头节点链表的尾部。前面两种属于常用的方法,比如开放地址法,是一旦发生了碰撞就去寻找下一个空的散列地址。由两个不同输入值,根据同一散列函数计算出散列值相同的情况叫做【碰撞】

2023-10-28 15:22:07 604

原创 算法通关村—括号匹配问题解析

7、若不为空则把stack的栈顶元素作为key,在map中找到对应的value与item比较。3、建立一个item,遍历整个字符串并转化为char类型丢进item。4、建立一个stack,判断item的所有元素是否在map中存在。2、建立一个HashMap,将不同括号的类型都丢进去。8、若不相等以及stack为空则返回false。5、如果存在则将该元素丢到stack里。1、首先判断字符串长度是否小于等于1。6、若不存在则判断stack是否为空。

2023-10-27 10:59:29 532

原创 《算法通关村—如何基于数组实现栈》

【代码】《算法通关村—如何基于数组实现栈》

2023-10-26 11:58:11 604

原创 算法通关村——双指针的妙用

LeetCode189.给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

2023-10-24 14:23:48 580

原创 算法通关村——不简单的数组增删改查

【代码】算法通关村——不简单的数组增删改查。

2023-10-23 14:40:51 743

原创 算法通关村第二关——用虚拟节点解决区间反转链表问题解析

【代码】算法通关村第二关——用虚拟节点解决区间反转链表问题解析。

2023-10-21 10:28:57 840

原创 算法通关村第二关——终于学会链表反转了

建立虚拟节点进行链表反转。

2023-10-20 16:31:14 851

原创 算法通关村第一关——链表经典问题之第一个公共子节点问题笔记

接下里就是我看不懂但是我大受震撼的解法。栈真好用但是要占用一点点儿小内存。

2023-10-18 16:44:50 966

原创 算法通关村第一关——链表青铜挑战笔记

在给插入的新节点连线时不能先把目标节点的前个节点的指针指向新节点。(2)删除中间节点直接将要删除节点的上一个节点的指针指向删除节点的下一个节点即可。(2)在中间增加元素要注意的问题是 我们必须要遍历到目标节点的前一个节点停下,要先等目标节点的前个节点的指针的指针先连到目标节点才行。(1)删除首部节点直接将head指向旧头部节点改为指向新头部节点即可。(3)删除尾部节点直接将旧尾部节点的上一个节点的指针指向null即可。(3)在尾部增加元素直接将旧尾部节点指向新尾部节点就行了。1、首先创建头指针和头节点;

2023-10-16 15:15:02 1083

空空如也

空空如也

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

TA关注的人

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