
算法笔记
文章平均质量分 53
PnJg?
这个作者很懒,什么都没留下…
展开
-
14-大数据题目(资源限制类题目)的解题技巧
1、题目一原创 2022-07-11 20:24:41 · 181 阅读 · 0 评论 -
14-树形dp解题套路提高、二叉树的Morris遍历
1、树形dp解题套路1-1题目一:可能性分类:(1)头节点不参与:最大距离不通过头节点X,最大距离可能来自于左子树、右子树(2)头节点X参与:左树最远节点到右树最远节点,距离为左树高+1+右树高...原创 2022-03-29 22:25:55 · 604 阅读 · 0 评论 -
13-滑动窗口、单调栈结构
1-滑动窗口问题1.1窗口最大值最小值的更新结构左边界右边界都往右边动不可以往左边动;左边界不可以超过右边界。解决办法:双端队列:头尾都可以进出队列。双端队列内部的排序是按照头->尾是按照大->小的排列。窗口R滑动的时候:如果窗口活动的时候不能保证单调性,那么队列中的数据要一个一个的从队尾弹出,弹出的数据永不找回,弹出到新的数据加入进去之后满足单调性。窗口L滑动的时候:L滑动完之后判断一下L是否让双端队列的头部节点过期了(L也是个int类型数据)即此时窗口不包括头部节原创 2022-03-26 22:03:11 · 728 阅读 · 0 评论 -
12-Manacher算法
1.Mancher算法求子串长度,后推广到求最长回文字串长度,例如:abce12130decba,那么最长的回文字串就是121.求回文长度的经典解法:以每一个字符为对称轴向外扩,但是这样只能求出长度为奇数的回文。经典做法的优化:对于长度为偶数的回文,可以在原字符串之间加入新的字符,这样就能把奇偶长度的都求出来。问:加入的新字符串是否一定要为原字符串中没有出现过的字符?答:不需要,因为比对的时候一直都是新的跟新的比,旧的跟旧的比,不会影响旧的之间是否相等的问题,所以加入的字符可以是随意的字符...原创 2022-03-23 21:52:15 · 111 阅读 · 0 评论 -
11-KMP、并查集
1、岛问题并行算法2、并查集:支持集合合并的结构图指针向上指的结构原创 2022-03-14 22:44:58 · 117 阅读 · 0 评论 -
10-哈希函数与哈希表、布隆过滤器
1、认识函数和哈希表的实现(1)一般来说输入是无穷,输出的有限的,常见的例如md5\sha1算法(2)一个哈希函数,如果输入是相同的,那么输出的一定相同,就是意味着哈希函数没有任何随机因子(3)不同的输入可能会导致相同的输出——哈希碰撞(4)...原创 2022-03-10 22:10:27 · 327 阅读 · 0 评论 -
9-暴力递归/暴力尝试
题目一:汉诺塔问题将三个杆子分别看成from、to、other,目标是将圆盘从from放到to,分成三步:(1):将1~i-1的圆盘从from放到other上;(2):将第i个圆盘放到to上;(3):将1~i-1从other放到to上题目二:打印字符串子序列i:当前来到i位置,可以选择要和不要两条路res:res代表之前的选择所形成的列表省空间的做法:题目三:打印字符串的全部排列全排列:不重复的重排序:...原创 2022-02-20 21:58:10 · 234 阅读 · 0 评论 -
8-详解前缀树&贪心算法&N皇后问题
一、何为前缀树?如何生成前缀树?经典的前缀树:点上没有数据,如果有路就复用,没有路就新建。前缀树点的结构:pass:代表这个点经过了多少次,根节点的pass代表有多少个字符串前缀为空,或者一共加了多少个字符串end:代表这个节点是否是一个字符串的结尾结点,如果是,他是多少个的结尾构造前缀树的代码:怎么查询某个字符串加入了几次?所有加入的字符中,有几个是以pre作为前缀的?前缀树删除操作:沿途pass--,最后一个字符end--。二、...原创 2021-11-27 22:09:00 · 1077 阅读 · 0 评论 -
左神算法-7-图
图的存储方式:(1)邻接表(2)邻接矩阵选一种自己喜欢的结构去练所有的算法,面试的时候把给出的结构换成一直练的结构然后去做题。推荐图的表达、模板(经常用的图的结构——支持所有的算法):如何把用户给的数据转化成我们熟悉的结构?例子:图的算法:1、...原创 2021-11-05 22:23:16 · 253 阅读 · 0 评论 -
leetcode题141:环形链表
题目描述:解题思路:这个题目在左神算法课上初级班讲解链表的课上就有讲如何判断一个链表是否有环,我自己总结的笔记在:https://blog.youkuaiyun.com/PnJgHT/article/details/120958609笔记中有两种方法:一种是用哈希表,这个方法就是逻辑比较简单,把每个节点依次放进表中,如果有返回已存在的节点就是有环;但是因为题目的进阶要求是用O(1)的内存解决问题,所以就用到第二种方法:快慢指针。关于有环链表的数学特点在笔记中都有总结。下面是我得代码:.原创 2021-10-27 21:17:39 · 1405 阅读 · 0 评论 -
leetcode题21:合并两条有序链表
这题属于简单题,题目也确实比较简单,这题直接用暴力解法是可以的,并不需要太多复杂的技巧。我在做的时候想的比较久的是base case的写法,不知道怎么使代码变得简洁,会担心漏掉情况,所以整体代码比较冗余,下面是我得代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNo..原创 2021-10-26 20:39:26 · 81 阅读 · 0 评论 -
左神算法-二叉树题目-初级班
二叉树相关题目题目一给定两个二叉树的节点node1和node2,找到他们的最低公共祖先节点。法一解题思路:利用hashMap,把每个节点的父节点记录下来,再把node1的往回溯,利用hashset记录下经过的每个点,再对node2进行回溯,每回一个就跟hashset里的比较,有一样的就是第一个的祖先节点方法二:题目二在二叉树中找到一个节点的后继节点(中序遍历的后一个节点)实现时间复杂度为O(K),K为两个节点的真实距离情况一X有右树时,后继节点是...原创 2021-10-25 22:21:17 · 170 阅读 · 0 评论 -
左神算法-6-二叉树(树形DP类型解题套路)
递归遍历树:递归序每个值都会出现3次先序遍历:由递归序得来,递归序中第一次到每个数就打印,后面到的啥都不干中序遍历:由递归序得来,递归序中第二次到每个数就打印,后面到的啥都不干后序遍历:由递归序得来,递归序中第三次到每个数就打印,后面到的啥都不干非递归遍历树:先序遍历准备一个栈,把头节点放入栈,接下来步骤如下:后序遍历先序是:头左右,如果弄出先序’:头右左,弹出不打印,放入辅助栈,再弹出辅助栈的每一个并打印,得...原创 2021-10-25 21:16:35 · 373 阅读 · 0 评论 -
左神算法课-5-链表(含解题技巧)
链表总结题目1:技巧:快慢指针:比如回文结构中,让快指针一次走两步,慢指针一次走一步,这样快指针走完的时候慢指针刚好在中点。解法1:笔试遇到此类问题,放到栈里就行了(或者就放右边的那一部分,这样省了一般的空间)。再弹出跟原链表一一比对。更优解法(只用几个有限变量,空间复杂度更优):用快慢指针,慢指针指到中点时让中点指向空,后面的逆序往回指: ,如果分别遍历的时候都一样则是回文,最后恢复原链表。题目2:原题目解...原创 2021-10-25 20:24:50 · 296 阅读 · 0 评论 -
左神算法课笔记-4-哈希表、有序表
哈希表(使用的时候时间复杂度都为常数级别)1、Hashset和Hashmap的区别:前者只有key没有value,后者是键值对。6、如果是int、string之类的基础类型,就把这个类型的值直接放进哈希表,如果不是基础类型,就放地址(8字节)有序表(所有操作的时间复杂度都是O(N*logN))...原创 2021-10-25 19:33:52 · 124 阅读 · 0 评论