算法
文章平均质量分 86
裙下的霸气
01010101010
展开
-
算法——BFS解决FloodFill算法
中文:洪水灌溉。假设这一块4*4的方格是一块土地,有凸起的地方,也有凹陷的地方(凹陷的地方用负数表示)。此时下大雨发洪水,会把凹陷的地方填满。绿色圈起来的属于一块区域(上下左右四个方向,有时候题目也会问八个方向包括斜着相连的),题目会问有多少块区域被填满,或者问被填满的最大区域是哪个;或某一块区域的边长是多少。但是本质都是让我们在一块区域找性质相同的连通块。DFS——深度优先遍历(递归):从某一点开始一条路走到黑。原创 2024-01-04 17:49:19 · 886 阅读 · 0 评论 -
算法——优先级队列(堆)
每一回合,从中选出两块** 最重的** 石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。拿到数组后先创建一个大根堆,将数组中的数字全部丢入大根堆里,先后两次拿出堆顶元素,让其碰撞,将碰撞后的结果重新放入大根堆中,给定一个单词列表 words 和一个整数 k ,返回前 k_ _个出现次数最多的单词。如果没有石头剩下,就返回 0。返回的答案应该按单词出现频率由高到低排序。排序后第K大的元素,包括相同的元素也统计进去。返回当前数组中的中位数,数组中会一个个添加数字。原创 2024-01-04 09:43:34 · 901 阅读 · 0 评论 -
算法——队列+宽搜(BFS)
队列这种数据结构大都服务于一个算法——宽搜(BFS)。宽搜还可以运用到二叉树、图、迷宫最短路径问题、拓扑排序等等。原创 2024-01-02 16:59:59 · 680 阅读 · 1 评论 -
算法——栈
接下来开始遍历数字(要把它从字符串中提前出来)当遇到第一个数字时,不要提取,先把他放入栈中,因为我们在数字前面初始化了+,我们不知道数字下一个位置的运算符是什么,如果是乘除,这个数字就要和后面的运算符结合。当箭头移动到4时,此时char里存储的是*,此时把栈顶元素弹出来计算(因为本题中没有括号,乘除法的优先级为最高,所以可以大胆将其弹出进行运算)执行完4*6之后,将24继续放入栈里。刚开始遇到数字,要先把数字提取出来,放到int栈里,碰到左括号,将左括号后的字符提取出来放入string栈里。原创 2023-12-29 12:05:47 · 1089 阅读 · 1 评论 -
算法——字符串
先不处理进位情况。相加完之后再处理进位情况。创建一个长度为m+n-1的数组,让下面的数去乘上面的数,判断放在哪个位置时,就让两个数字下标相加即可。比如用6去乘3,即都是0位置上,最终18就放在数组0下标的位置上。最终处理进位时,就相当于让tmp里的数再和0相加放入ret里就行。最后的最后处理前导0.原创 2023-12-28 16:13:47 · 1045 阅读 · 0 评论 -
算法——哈希表
*是什么:**存储数据的容器:快速查找某个元素,时间复杂度O(1),空间复杂度O(n)**什么时候使用哈希表:**频繁查找某一个数(这里不要忘了之前的二分,时间复杂度O(logN)): 1.容器 2.用数组模拟简易哈希表。原创 2023-12-25 17:50:05 · 1043 阅读 · 1 评论 -
算法——链表
我们一般选择创建哨兵位头结点,这里我们哨兵位不存储数据。解释传入空链表,这里的newhead只需要特判一下即可不要吝啬空间,大胆定义变量。原创 2023-12-25 10:17:14 · 1030 阅读 · 1 评论 -
算法——分治
用归并算法给数组排序,首先先选择mid中间点,先把左边部分排序,排左边的时候相当于又是一个归并排序的过程,直至只剩下一个元素的时候,向上返回,排右边区间,直至剩下一个元素时,开始向上返回,当这一层都排完时,合并两个有序数组。当cur1[num] <= cur2[num]:说明此时还没有比cur2位置上大的数,就继续找,直到找到cur1位置大于cur2位置的数,所以让cur1++(本质上是先把cur1位置的数放到辅助数组里面,然后让cur1++)找两个数,使前面的数大于后面的数2倍。该算法是基于快排改良的。原创 2023-12-18 09:36:07 · 401 阅读 · 3 评论 -
算法——模拟
比葫芦画瓢,题目思路比较简单,考验思路转化为代码能力。原创 2023-12-12 16:58:09 · 881 阅读 · 0 评论 -
算法——位运算
一大堆数随便异或(不考虑运算顺序),结果是唯一的运用6、7LeetCode191. 位1的个数LeetCode318. 比特位计数LeetCode461. 汉明距离运用9LeetCode136. 只出现一次的数字LeetCode260. 只出现一次的数字III。原创 2023-12-11 16:46:29 · 480 阅读 · 0 评论 -
算法——前缀和
该算法是先预处理一个数组,用空间换时间,将原本时间复杂度为O(n2)降为O(n)原创 2023-12-08 11:03:47 · 1075 阅读 · 1 评论 -
算法——二分查找
在排序数组中查找元素的第一个和最后一个位置。原创 2023-12-05 16:59:16 · 1620 阅读 · 2 评论 -
算法——滑动窗口
更新结果这一步,需要结合实际题目具体分析,有时候需要进窗口的时候更新结果,有的时候需要出窗口时更新结果,此题出窗口前更新结果。滑动窗口的正确性:利用单调性,规避掉了很多没有必要的枚举时间复杂度:从代码角度看,好像是两层循环嵌套,时间复杂度似乎也是O(n2),但是实际情况我们对窗口进行操作时,left、right每次只移动了一步(即我们的两个指针不回退),最多两个一共移动n+n次,即时间复杂度为O(n)原创 2023-12-01 10:34:32 · 5505 阅读 · 3 评论 -
刷题——轮转数组
刷题原创 2022-09-09 20:36:22 · 128 阅读 · 0 评论 -
刷题——分割链表、相交链表
刷题原创 2022-09-09 20:35:25 · 202 阅读 · 0 评论 -
string类应用
刷题原创 2022-09-09 20:30:58 · 128 阅读 · 0 评论 -
刷题——队列与栈的相互实现
刷题原创 2022-09-09 20:32:54 · 113 阅读 · 0 评论 -
刷题——复制带随即指针的链表
刷题原创 2022-09-09 20:37:06 · 177 阅读 · 0 评论 -
二叉树刷题
刷题原创 2022-09-09 20:31:43 · 89 阅读 · 0 评论 -
算法—双指针
双指针算法可以帮忙把时间复杂度降低一个维度,即原本O(n2)降为O(n);将O(n)降为O(1)原创 2023-11-28 15:43:29 · 544 阅读 · 4 评论