数据结构和算法
文章平均质量分 83
不属于这个时代の愚者
这个作者很懒,什么都没留下…
展开
-
Manacher算法
Manacher并不只是用于求最大回文串,最精华的部分在于经过这个算法处理出来的rad数组;可以将rad数组每个元素-1,就是每个位置的回文串长度,这对于解决某些难题非常有用。具体的,可以在力扣搜索`回文`关键词,有一些题目就可以利用这个数组做极大的复杂度优化。...原创 2022-07-25 00:30:24 · 392 阅读 · 1 评论 -
蓄水池抽样:动态等概率抽样
昨天学习了一个比较有意思的也比较简单的算法,记录一下不知道总样本为多少, 而且由于内存不足,不能把样本全部读进来;现在想一个办法,从中随机等概率获取其中一个样本输出【或者也可以:对于当前已经遍历过的样本,从中等概率的得到一个样本】经典算法:将所有的遍历样本存入到一个集合中,每次遍历对集合元素随机取值。我们需要考虑一种空间复杂度足够低的方法,一种有效的方法就是蓄水池抽样。设定两个量:1)res,存储当前抽样结果;2)i:当前遍历的样本数量【从1开始】对于要求1,我们可以在每轮替换后输出一次,就相当于获取原创 2022-06-10 23:28:00 · 306 阅读 · 0 评论 -
数位DP:我的理解与模板【java实现】
数位DP前言这个星期研究了好几天的数位DP问题,已经摸到一点门路了,所以写篇笔记记录一下,用于之后的复习。我的做法完全参考自y总的思路和代码,只不过采用java实现,第二节的例题也是,第三节使用leetcode几道原题。另外还参考了这位大佬的博客,大家也可以去看看,题目比我的更全。y总的课性价比超高,以后有票了买一波课回去研究研究。这里只列了他讲的比较简单的几题,力扣的题目就更简单了(虽然标签都是hard…),若想深入研究可以去听课。PS: 数位dp难度较高(基本上入门题在力扣都是hard),原创 2022-05-08 09:30:26 · 1095 阅读 · 1 评论 -
算法-排列问题【回溯、交换元素】
文章目录前言一、剑指offer-38:字符的全排列问题二、LeetCode-51:八皇后问题后话前言全排列问题大部分都是一个模板的。以前一直以为是通过一层递归一次添加一个元素这样,但是写起来没有位置互换这样方便,要考虑的情况也太多。记录一下这种调换式的解题模板一、剑指offer-38:字符的全排列问题题目描述:输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = “abc”输出:[“abc”,“acb”,“bac原创 2021-02-09 16:48:07 · 250 阅读 · 0 评论 -
剑指-35
文章目录题目描述一、解法一:哈希表法二、解法二:插入法总结题目描述请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。本题的两个解法都很有意思,mark一下【重点学习第二种方法】一、解法一:哈希表法利用哈希表建立原链表head到新链表result的映射第一趟遍历:根据head的val创建新链表节点将 head:result 的键值对放到HashMap中原创 2021-02-06 12:55:04 · 140 阅读 · 0 评论 -
Ex23-查找环形链表的入口节点
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录题目描述一、分析二、总结题目描述给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出原创 2021-02-05 09:47:52 · 148 阅读 · 0 评论 -
剑指20-表示数值的字符串
今天刷到一个贼恶心的题目, 大佬k神 的有穷状态机解法令我大开眼界。特此作文以记之。文章目录题目描述一、有穷状态机图二、使用哈希表存储状态三、转换逻辑题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。字符串匹配问题常可以使用状态机来解,画状态机不算难,但是像这样条件复杂就很难,之前做到原创 2021-02-03 18:09:04 · 120 阅读 · 0 评论 -
剑指offer-17 打印n位10进制数
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。n的位数可能比long的存储范围还大,最后打印字符串即可。为了加大效率,不采用BigInteger类。文章目录前言解法前言这题不知道为什么力扣的题目整个的削弱了《据说是因为lc恰烂钱》。因为正好不理解java对大数的处理,记录一下真正的原题题解。解法思路:如果不使用普通的int和long而使用String来存储,就不能方便的使用加号或者自动进位;另外,若是.原创 2021-02-02 10:01:47 · 207 阅读 · 0 评论 -
剑指offer-java进制与数位运算符
今天刷题遇到了二进制操作,发现我以前学的忘得差不多了。甚至有些java运算符号,我完全不清楚的,特地记录一下。文章目录前言一、java的进制表示二、java进制转换方法1.其他进制转化为二进制字符串2. 其他进制字符串转为十进制数值:三、java关于数位的运算符前言java程序员只有10种人,一种懂二进制,一种不懂。呵呵~好冷。一、java的进制表示二进制: 0b_____, 使用0b开头八进制: 0_____, 使用0开头【对,如果开头有0就是八进制,没有0就是十进制,简单粗暴】.原创 2021-01-31 15:52:20 · 219 阅读 · 0 评论 -
剑指offer-13-是否存在字符路径
问题描述:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径[[“a”,“b”,“c”,“e”],[“s”,“f”,“c”,“s”],[“a”,“d”,“e”,“e”]]但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路.原创 2021-01-30 11:54:58 · 169 阅读 · 1 评论 -
算法-石子堆合并问题
<font问题描述:一维数组的每一项表示一个石子堆,将相邻两个石子堆“合并”,指的是,将相邻两个数组元素加到一起,并需要付出代价【即两堆石子的重量之和】,求合并到一堆过程中损耗的价值最少为多少如, 1, 3, 2, 5, 43,2合并: 1, 5, 5, 4 代价51,5合并,6,5,4 代价64,5合并 6, 9 代价96,9 合并 代价15总代价 35.文章目录前言一、状态集合二、状态空间前言这是一个典型的区间型动态规划问题,值的学习。一、状态集合所要求的是原创 2021-01-29 18:56:43 · 523 阅读 · 0 评论 -
二刷剑指offer-33-验证数组是否为二叉搜索树的后序序列
题目描述如下:1. 递归分治法二叉搜索树的特点是:左子树值小于根节点,右子树值小于根节点。后序序列的特点是:(1)最后一个节点为该子树的根节点root;(2)倒数第二个节点为右子树根节点;(3)从右向左遍历,第一个大于root的节点为左子树根节点。因此递归分析如下:每次求得左子树根节点lr;遍历左右子树的范围,若有不符合二叉搜素树性质的元素,直接返回false。左子树范围 : left ~ lr右子树范围: lr + 1 ~ root - 1;递归判别左右子树是否满足同样的性质。原创 2021-01-28 14:14:28 · 83 阅读 · 0 评论