- 博客(509)
- 资源 (7)
- 收藏
- 关注

原创 LRU缓存[线性表 -> 链表 -> hash定位 -> 双向链表]
对于LRU缓存,记忆根在hash + 双向链表,而分析的逻辑为线性表 -> 链表 -> hash定位 -> 双向链表 -> 双向链表。除此之外,泛型化 / loadfactor扩容 / gc压力 / 函数化 / 并发lru都需要注意
2022-07-31 12:11:50
367
原创 等差子数组[O(n)判断数组是否为等差数列]
如何判定一个数组是否为等差数列,可以直接排序O(nlogn),再不断求相邻数之间的差值,通过前后差值一致+传递性,完成等差数列的判定。但这没有充分利用等差数列的特性,强行将数排序,不如把每个数在等差数列的位置记下来,实现空间换时间。
2023-03-24 17:29:57
530
原创 分割两个字符串得到回文串[抽象--去除具体个性取共性需求]
抽象去个性留共性,是因为具体个性对于解决问题是个累赘。少了累赘,直击需求,才能进行问题转换或者逻辑转换。
2023-03-18 20:11:52
599
原创 给定行和列的和求可行矩阵[算法题的两种思考路径]
算法题的两种思考路径前言一、给定行列和限定求可行矩阵二、分析问题,寻找思考逻辑总结参考资料前言对于算法题,有时没顾太多细节,凭对题型的直觉就知道用什么方法,然后求解。但碰到从未遇到过,或者说无强烈固定套路可循的算法题,就需要分析问题,并记录下来,寻找规律和思考角度,完成方案的制定。可先凭直觉解题,再凭分析把题理解透彻。一、给定行列和限定求可行矩阵二、分析问题,寻找思考逻辑// 通过整体限制,寻找局部元素的可能性。// 有行和,有列和,找元素。// 一维情况下,有行和,如何寻找元素(非负),先
2023-03-14 21:29:19
240
原创 使数组和能被P整除[同余定理+同余定理变形]
同余定理非常经典,采用前缀和 + map,当两个余数前缀和为一个值时,则中间一段子数组刚好对P整除。但是能否找到前面是否有一段子数组和可以对P整除呐?反向思考,找map[P - mod]就知道中间一段子数组和对P取余为mod,前面一段子数组和对P取余为0.
2023-03-10 19:48:24
686
原创 节点间通路[go 使用队列记录]
在图中,寻找起点到目标点的步数/是否存在路径相关,bfs相对dfs更快,毕竟空间换时间了,双向bfs会更快一点,毕竟一层一层的扩展起来非常大,队列要存太多元素。
2023-03-09 11:05:55
175
原创 使字符串平衡的最少删除次数[动态规划+状态压缩+中心划分思想]
动态规划,就是把问题分解成相同性质规模越小的递推问题,而有时候不仅仅是知道当前的什么状态就可以了,有时候需要对当前进行细分类,从而变成二维dp,或者高维dp。除此之外,中心划分思想也是一个经典的算法思想。
2023-03-06 22:33:31
182
原创 按位与为零的三元组[掩码+异或的作用]
当a + b = 0时,我们能够很清楚的知道b是个什么值,b = 0 - a = -a,如果当a & b = 0时,我们能够很清楚的知道b是什么值吗?
2023-03-04 15:50:05
535
原创 保证文件名唯一[map计数]
map的key使用起来还很简单,但是value要存什么,就需要对题有一定的理解和问题转换,有时不是死板的存一个set进去,或许存一个变量就替代了set,此时说明set中前面存的所有对题解都没关系,可以抽象舍弃。
2023-03-03 12:19:18
136
原创 阶乘后的零[挖掘规律+动态规划]
想要计算阶乘后的0有多少,可以直接算出阶乘值,再不断对10取余。但是如果n比较大,这种方法是根本行不通的,只能挖掘规律。
2023-02-28 23:44:05
194
原创 Type and Value
reflect.Type和reflect.Value是go 反射的两大基本类型,一个管变量的类型方面,一个管变量的值方面。
2023-02-27 19:49:47
307
原创 得分最高的单词集合[二进制枚举]
二进制枚举是把每个节点当作二进制的1bit,0表示未选择,1表示选择,就像是寻找子集一样,这样就可以减少DFS调用栈的开销。
2023-02-26 22:43:07
138
原创 交换字符使得字符串相同[贪心]
贪心算法,必须先看清楚有哪些选择,才能在这些选择的基础上进行贪心,做最优选择,除此之外,还得看局部最优会不会形成全局最优,否则无法贪心。
2023-02-25 12:37:11
453
原创 回文子串的数量[寻找回文子串的完整思路过程]
回文字符串,就是从左遍历和从右遍历的字符是相同顺序的,转换一下,就是该字符串是对称的。寻找回文子串面临两个直接的问题,1-如何确定一个子串?2-如何判断该子串是否为回文串?
2023-02-20 12:19:53
1089
原创 找出给定方程的正整数解[单增或者有序概念与二分&双指针的紧密联系]
双指针取值常用于有序/单增/单减这些场景中,利用有序大大降低时间复杂度,如果没序,就O(nlogn)排个序,也比O(n方)好。同样的,二分法也是在同样的场景中,有序/单增/单减,将时间复杂度降到O(logn),非常方便。
2023-02-18 12:53:28
197
原创 表现良好的最长时段[前缀和思想&子数组]
对于子数组/子串问题,紧密连续前缀和/滑动窗口/单调栈;挖掘内在规律,可以简化代码,降低时空复杂度或消耗量。
2023-02-15 18:07:50
278
原创 替换子串得到平衡字符串[map计数+滑动窗口]
对于子串问题,确定左边界和有边界,就能确定一个子串,暴力取子串,时间复杂度O(n2)。有时挖掘内在规律的限定,或者问题所限定,就可以采用滑动窗口寻找子串,时间复杂度O(n)。
2023-02-13 22:15:20
311
原创 字母板上的路径[提取公共代码,提高复用率]
写代码,在提高效率的同时,要方便人看,这个人包括自己。大函数要拆分成一些小函数,让每个函数的宏观目的和步骤都显得清晰,读起来才容易懂。除此之外,拆分也有讲究,提取公共代码,尽量减少重复无意义的代码,提高复用率。
2023-02-13 14:08:35
339
原创 装满杯子需要的最短时长[贪心模拟 || 全局贪心]
碰到局部选择,加上结果最值导向,基本就是不断最优解直到求到全局最值,经典的贪心思维,不断选择最优方向,就是一种贪心模拟;而有些问题,可以做到全局角度观察,挖掘其数学规律,以常数级复杂度完成贪心求解。
2023-02-12 13:03:00
287
原创 设计一个验证系统[LRU思想--双向链表+hash]
设计一个验证码系统,给定生成的验证码和时间,主要设计精力集中在有效验证码的数据结构设计,要求存储好生成的验证码;可重置任何未过期的验证码;统计未过期的验证码数量。
2023-02-09 15:20:38
176
原创 删除子文件夹[字典树 + go变量 + strings.builder的copyCheck()]
字典树;panic: strings: illegal use of non-zero Builder copied by value
2023-02-08 20:16:42
275
原创 分割等和子集[问题转换&限定的01背包]
01背包是动态规划的基础,解决特定的问题,而有的相关算法问题内部潜藏本质问题,需要做到问题转换,问题联系,然后用基础知识解决问题。
2023-02-07 15:26:33
114
原创 行列有序矩阵搜索[二分 && Z字搜索]
从矩阵中搜索一个元素,暴力搜索O(mn)。如果行列有序,则可二分 + 剪枝来进行搜索。除此之外,利用行列同时有序,在搜索的过程中将可搜索空间压缩,直至找到target,为Z字搜索O(m + n)。
2023-02-06 18:56:50
165
原创 比特位计数[动态规划 || bitCount计数]
二进制计数可以直接基于分治去快速统计,如果是连续数的二进制计数,可以利用前面已经计算出的状态进行递推求解,即动态规划。
2023-01-13 11:03:25
680
原创 阿拉伯数转中文与英文[找到规律,抽象问题,转换成代码]
如果思考算法的解法方案是一种模拟,那么这一般不是个好的解决方案。对于一个复杂的问题,挖掘其中的规律,把问题抽象处理统一解决,这样代码才会简洁清晰。
2023-01-11 20:41:42
622
原创 缀点成线[巧用变量抽象问题->统一操作]
验证所有点在一条直线上,只需确定y=kx + b的k与b即可,但是k可能是无穷大,即直线垂直的时候。将函数抽象为x=0*y + b,这样还不够抽象,将x/y都视为一个变量时,两种情况对调传递变量即可统一操作。
2023-01-11 14:45:46
68
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人