自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 字符串哈希

使用unsigned long long来做自然溢出。

2024-02-04 15:28:14 128

原创 数位dp模板

【代码】数位dp模板。

2023-08-05 13:57:41 115

原创 RMQ算法模板

RMQ算法,主要用于求区间最大值或者区间最小值。本质就是通过倍增的方法进行计算。

2022-09-04 00:22:55 194 1

原创 Leetcode 剑指 Offer 20. 表示数值的字符串

题目链接:剑指 Offer 20. 表示数值的字符串题目大意:给你一个字符串,问他是否是合法字符题目思路:最开始以为是个大模拟,写了半天,各种特判才放过去,评论区有很多更好的分类方法,比如分为A.BeC这种情况,然后分为有符号数和无符号数的情况特判,这种特判是我见过的最好的做法了,秒杀自动机的做法。 不过标程还是采用了有限自动机的做法,所以还是把重点放在有限自动机上,最根本的状态就在下面这张图上,具体的分析可以见官方题解,有了转移状态,就可以很好的写出代码了。时间复杂度&&空间复杂

2020-12-01 13:46:58 190

原创 Leetcode 剑指 Offer 19. 正则表达式匹配

题目链接:剑指 Offer 19. 正则表达式匹配题目大意:给你一个原串和匹配串,其中匹配串中有.和*两种特殊字符,.可以匹配任意字符,*可以匹配任意个他前面的字符(包括0个),问是否能匹配题目思路:经典题目了,很早之前就做过,不过发现又不太会了,看了题解才捋清除。首先考虑dp的做法,dp[i][j]是一个bool型,代表s串的前i个字符与p串的前j个字符是否匹配,考虑匹配串的最后一个字符:1、如果该字符是正常的字母,那么只需要判断他与原串的最后一个字母是否相等,不想等则一定不匹配,相等也需要根据前面

2020-11-30 22:15:34 165

原创 Leetcode 剑指 Offer 14- II. 剪绳子 II LCOF

题目链接:剪绳子 II LCOF题目大意:给你一个绳子,长度为n,要求你拆分其为m(m>2)段,并且要求所有段长度的乘积最大题目思路:比较经典的一个题目了,首先可以想到的一个经典解法是dp的做法,对于一个绳子,我们先任意减去一小段,这样得到的就是更小的绳子,而更小的绳子的最大乘积我们可以得到,因此就有了答案,枚举取最大值即可。 而另一个解法涉及到到数学问题,这个做法的证明可以见官方题解,证明的很好,本质上是证明一个下界,比较容易想到的解法是长度为n的绳子拆分成m段,一定是均分后得到的乘积最大,而

2020-11-26 17:07:43 121

原创 Leetcode 76. Minimum Window Substring

题目链接:Minimum Window Substring题目大意:给你一个字符串s和字符串t,要求你找到包含t中所有字符的s字符的字串题目思路:双指针即可,在扫描的时候维护一个字符集,这个字符集动态的根据双指针的位置进行更新,每次更新之后与字符串t进行比较即可,思路比较简单,不过时间卡的比较死,需要用unordered_map这个哈希表来进行表示,用map的话会导致超时。时间复杂度&&空间复杂度:O(lens*lent)&&O(lent)class Solution

2020-08-18 11:55:07 138

原创 Leetcode 540. Single Element in a Sorted Array

题目链接:Single Element in a Sorted Array题目大意:给你一个有序数组,里面只有一个数只出现一次,其他数只出现两次,要求你找到这个数,要求复杂度为O(logn)题目思路:数组有序,且要求复杂度是Log,所以可以很容易的想到使用二分,每次二分的判断条件可以使用这样一个问题,如果当前数与前后都不相同,那么这个数就是我们要找的数,如果他与后面一个树相同,那么我们可以通过它后面数的个数来判断,如果后面的长度为偶数,那么后面必然没有单独的一个数,不然这个长度一定为奇(其他数都是两个,

2020-05-12 18:40:42 196

原创 Leetcode Check If a String Is a Valid Sequence from Root to Leaves Path in a Binary Tree

题目链接:Check If a String Is a Valid Sequence from Root to Leaves Path in a Binary Tree题目大意:要求你去找到一条路径,要求这条路径上的值跟要求的arr数组长度和值都一样,并且这条路径是从根节点到叶子节点题目思路:一个简单的dfs即可,我们可以知道,对于找到的路径,每个节点的层数就是他在数组中的第几个,所以可以记录...

2020-04-30 20:12:21 413

原创 Leetcode 124. Binary Tree Maximum Path Sum

题目链接:Binary Tree Maximum Path Sum题目大意:要求在二叉树上找到最长路径题目思路:给之前的二叉树思路是一样的,这条路径一定是某个节点的左子树+节点本身+右子树(左右子树可以为空,比如左右子树全为负数,还不如不要),所以我们接着做dfs即可,每个dfs返回的是某个节点左子树或者右子树的最长路径+自己本身,每次统计的时候可以对某个节点找到左右子树最长,然后统计对于当前...

2020-04-29 21:40:47 183

原创 Leetcode First Unique Number

题目链接:First Unique Number题目大意:要求你实现这样一个功能,动态得增加数,然后查找当前数组里面第一个出现的仅出现一次的数字题目思路:简单题,我们每次只需要找第一次出现的数,如果一个数后面再出现,那么也不重要了,他一定不会是我们需要的数了,所以根本不要往里面加值了,对于旧得值,我们也只需要考虑这个数出现得次数是否超过一次,超过直接扔掉,不然当前的值就是只出现一次的值,可以用...

2020-04-28 21:47:20 228

原创 Leetcode 221. Maximal Square

题目链接:Maximal Square题目大意:给定一个零一矩阵,要求你找到里面最大的全1正方形(下面直接用矩阵表示)题目思路:一个简单DP,对于一个矩阵,我们需要考虑这样一个问题,这个矩阵是全1矩阵,如果这个1可以往下接着延申,那么这个全1矩阵就不是最优的,所以我们需要考虑对于某个1,他能得到的最优矩阵,那么一定是这个1是当前最优矩阵的右下角,我们可以用dp[i][j]表示以这个元素为右下角...

2020-04-27 23:03:05 176

原创 Leetcode 1143. Longest Common Subsequence

题目链接:Longest Common Subsequence题目大意:给定两个字符串,要求你要找最长公共子序列(不要求连续,只需要保证先后顺序)题目思路:一道DP好题吧,这个题不同于连续的写法,也不同于前缀,对于该题,可以想到一个dp解法,dp[i][j]表示text1的前i个和text2的前j个字符中的最长公共子序列,那么如果要往下一层递推会是什么情况呢,这时候需要比较当前的text1和t...

2020-04-26 21:33:26 158

原创 Leetcode 201. Bitwise AND of Numbers Range

题目链接:Bitwise AND of Numbers Range题目大意:给定n,m两个数,要求你对n到m这个区间的所有数做且运算,问最后的结果是多少(不得不说,最近这些天的每日打卡题目质量都还挺好的)题目思路:如果对区间所有数进行且运算,显然不合理,我们考虑这样一种情况,因为是做且运算,只要某一个位上0和1都同时出现,那么这一位显然是零,那么能不能通过这个条件去做,我们对n和m做比较,如果...

2020-04-23 17:29:37 150

原创 Leetcode 560. Subarray Sum Equals K

题目链接:Subarray Sum Equals K题目大意:给定一个数组,要求找到不同的连续子序列,他们的和为k,问这样的连续子序列有多少个题目思路:首先根据原始的想法,我们可以想到连续子序列的问题可以通过前缀和的方式进行解决,可以通过n^2的问题解决,但是这个做法并不太优,所以我们可以考虑对前缀和的方式进行优化,我们前缀和的思想是这样的,每次对某个区间进行操作,sum[j]-sum[i],...

2020-04-22 19:52:55 154

原创 Leetcode Leftmost Column with at Least a One

题目链接:Leftmost Column with at Least a One题目大意:给你一个n*m的01矩阵,这个矩阵的每一行都是一个非递减序列,要求你找到最前面的一列,这一列需要包括至少一个1题目思路:首先根据非递减的思想,我们可以很容易的想到,对于每一行最开始的1,我们可以用二分找到,如果每一行都找到了对应的初始1的列,那么所有列最初始1的位置就可以找到了,代码见解法一(对于找到最左...

2020-04-21 18:15:35 318

原创 Leetcode 1008. Construct Binary Search Tree from Preorder Traversal

题目链接:Construct Binary Search Tree from Preorder Traversal题目大意:给定一个二叉树的前序遍历,要求给出对应的二叉搜索树题目思路:我们可以知道,对于给定的前序遍历,遍历的顺序是前左右,所以对于一个前序序列,第一个数一定就是根节点,然后后面有一段序列是左子树,剩下的序列是右子树,又因为是二叉搜索树,左子树的所有节点都小于根节点,右子树的所有节...

2020-04-20 20:17:55 157

原创 Leetcode 33. Search in Rotated Sorted Array

题目链接:Search in Rotated Sorted Array题目大意:给定一个有序数组,经过旋转得到新得数组,也即改变起点位置,如[0,1,2,4,5,6,7] 变成[4,5,6,7,0,1,2]。要求仍然在log的时间进行查找某个特定的target题目思路:我们可以知道其实这个数组可以分成两半部分的有序数组,所以我的步骤是这样的,将这个数组直接砍成两个数组来进行二分,不需要判断太多...

2020-04-19 17:49:13 204

原创 Leetcode 678. Valid Parenthesis String

题目链接:Valid Parenthesis String题目大意:给定一个只由左括号,右括号,星号组成的字符串,星号可以当作左括号,右括号或者空,问该字符串是否是匹配的题目思路:这题的解法十分多,比如我们可以使用两个栈,分别记录左括号和星号的位置,当遇到右括号时,有左括号就弹出左括号,没有就弹出星号去匹配。但是Leetcode的solution十分优秀,它的做法是这样的,定义一个贡献,是目前...

2020-04-16 23:43:04 186

原创 Leetcode 238. Product of Array Except Self

题目链接:Product of Array Except Self题目大意:给定一个数组,要求你求出数组中除了该数之外得数字乘积,要求不能使用除法,且除了输出数组之外不使用任何额外得空间题目思路:很有意思得一道题目,不考虑其他因素得话,我们只需要计算一次全体乘积,每次做除法即可,但是不能使用除法,所以需要考虑其他方法,很容易想到,可以使用前缀和和后缀和进行计算,对于一个数,只需要计算他前一个数...

2020-04-15 16:09:14 141

原创 Leetcode 525. Contiguous Array

题目链接:Contiguous Array题目大意:给定一个数组,数组中仅含0和1,要求你找到最长得一个连续子序列,该序列中0的数量和1的数量相等题目思路:要求零和一的数量相等,可以很容易的想到0和1是互相抵消的,所以我们不妨把0变成-1,这样题目就变成了找到一个连续子序列中数组和为0,首先,我们可以想到前缀和,如果某个前缀和是0,那么这个前缀区间一定是满足条件的,但是满足条件的不一定是前缀和...

2020-04-13 22:54:47 177

原创 Leetcode 543. Diameter of Binary Tree

题目链接:Diameter of Binary Tree题目大意:问题很简单,要求你去找出一颗二叉树的树直径(树中最长路)题目思路:对于树直径,我们首先可以想到这样的想法,我们在树中找一条最长路径,这条最长路径一一定是从一个叶子节点出发,到达另一个叶子节点,也就是说,实际上这一条路径一定是某一个非叶子节点的左子树高度加右子树高度,所以我们只需要在递归找树高度的情况下记录一下左右子树高度和即可...

2020-04-11 18:27:11 157

原创 2017四川省赛总结

这是一个重制版(原版不知道什么原因被删掉了,可能是管理员?然后不得不重写一份,就不膜蛤了)可能这个省赛是很纠结的东西啊,好像提前一个月 其它省都举办了省赛,然后sc慢一点?刚好省赛又在蓝桥杯国赛后面一周,所以五月份就很忙的啊,最主要的是有一门考试刚好跟这两个时间冲突,刚开始跟蓝桥杯冲突,后来又跟省赛冲突(然后跟蓝桥杯冲突可能蓝桥杯就割了啊,毕竟旅游嘛(flag立的飞起),但是跟省赛冲突就只能重修了

2020-04-11 17:35:01 1173 3

原创 Leetcode 155. Min Stack

题目链接:Min Stack题目大意:要求你去模拟一个栈,要求实现push,pop,top功能,并且附加了一个功能getMin,要求你去每次找到每次栈中最小的值题目思路:前面的模拟栈好说,直接用数组模拟栈或者更直接的使用stack即可,主要的问题是找到最小的值,这个问题需要记录最当前的最小值以及上一次的最小值,这个东西可以类似链表处理的方式,记录前驱即可(这种简单题还写了半天。。。)时间复杂...

2020-04-10 20:25:42 127

原创 Leetcode 1348. Tweet Counts Per Frequency

题目链接:Minimum Number of Steps to Make Two Strings Anagram题目大意:给定两个相同长度得字符串s和t,对于s中得字符,可以变成任何一个字符,问最少变换多少个字符可以从s到t题目思路:一个简单题,首先可以想到,从一个字符到另一个字符,如果s比t多一个a,少一个b,那么只需要将s中得a变成b即可,只需要一次而已,所以我们先考虑这种情况,也就是s多...

2020-02-16 16:00:51 472

原创 Leetcode 1347. Minimum Number of Steps to Make Two Strings Anagram

题目链接:Minimum Number of Steps to Make Two Strings Anagram题目大意:给定两个相同长度得字符串s和t,对于s中得字符,可以变成任何一个字符,问最少变换多少个字符可以从s到t题目思路:一个简单题,首先可以想到,从一个字符到另一个字符,如果s比t多一个a,少一个b,那么只需要将s中得a变成b即可,只需要一次而已,所以我们先考虑这种情况,也就是s多...

2020-02-13 18:19:58 185

原创 Leetcode 1340. Jump Game V

题目链接:Jump Game V题目大意:给定一个高度数组,每个数字代表一个高度,现在有如下规则:起点任选,从某个高度(起点)可以跳到另一个高度(终点),但是要求就是他们之间的距离得不大于d,且他们之间得所有高度值都得小于起始高度(包括终点),求从某个点开始能够访问最多的高度题目思路:首先我们可以想到一个逆向做法,我们从某个高度到比他低的高度不好做,但是如果我们知道了某一个高度的最多次数,如果...

2020-02-04 15:15:34 317

原创 Leetcode 1339. Maximum Product of Splitted Binary Tree

题目链接:Maximum Product of Splitted Binary Tree题目大意:给定一个二叉树,切割某条边,会分割成两个不同的二叉树,要求切割出来的两个子树权值和的乘积最大题目思路:我们可以知道,不管切割哪一条边,一定有一颗子树是某个节点的左右子树之一,那么剩下的权值就是另一个子树的权值,所以我们只需要找到所有节点的左右子树的权值和,然后用总权值和减去该子树的权值和,这就是两...

2020-02-04 13:58:18 305

原创 Leetcode 316. Remove Duplicate Letters

题目链接:Remove Duplicate Letters题目大意:给定一个字符串,要求删掉去重,且去重后的字符串字典序最小题目思路:我们可以想到一个贪心的做法,就是我们每次加入一个字符串,都对比一下前一个字符,如果前一个字符比较大并且前一个在后面还有出现,我们当然可以将前一个字符给扔掉,这样依次比较。所以我们可以想到去维护一个栈,因为每次比较前一个,那么比较栈顶即可,满足就弹出,剩下的问题就...

2020-02-03 21:14:30 129

原创 Leetcode 973. K Closest Points to Origin

题目链接:K Closest Points to Origin题目大意:给定一个二维点阵数组,要求找出离原点最近的K个数,按任意顺序排序,找出来即可题目思路:不按顺序输出,也即是找到K个数即可,那么可以想到的做法是类似快排的做法,给定一个数轴,找到比他小的数放在前面,比他大的数放在前面,这样就可以找到他的位置,然后与K作比较,决定下一次在右边还是左边进行比较。时间复杂度&&空...

2019-12-30 23:05:10 134

原创 Leetcode 15. 3Sum

题目链接:3Sum题目大意:给定一个数组,要求找出所有不重复的三元组,三元组之和为0题目思路:最开始考虑O(n3)的做法,三层for遍历,当然不行,考虑减一层,a+b+c = 0,我们可以两层for先找a和b,对c使用哈希表判断存在与否,使用哈希表可以记录数字出现与否,对每个相同的数字只找最后一个,然后判断该三元组是否存在,但是该办法很难判断重复,所以可以排好序之后,找到某个相同数的倒数第二个...

2019-11-26 20:48:19 104

原创 Leetcode 75. Sort Colors

题目链接:75. Sort Colors题目大意:给定一个数组,里面只包含0,1,2三个数,要求只做一次线性扫描,将数组变得有序题目思路:我们只有0,1,2三种不同的数,我们只需要考虑把0放在前面,2放在后面即可,类比快排,我们可以考虑这样的情况,我们定义三个指针,l,r,mid,l之前的值我们置为0,r之后的值我们置为2,mid我们用做扫值,碰到0就往前面扔,碰到2,就往后面扔,碰到2的时候...

2019-11-22 16:23:30 115

原创 Leetcode 239. Sliding Window Maximum

题目链接:239. Sliding Window Maximum题目大意:给定一个无序数组和一个k值,要求找出从前往后所有长度为k的滑动窗口中的最大值题目思路:用一个双端队列维护一个最大值序列,序列中保存序号,每次遇到新的值,我们可以将这个新值与序列中所有值从小到大进行比较,如果该值大于序列中的值,那么这之间的旧值就没有用了,因为新值更大并且序号更高,那么后面的最大值一定轮不到这个值,而序号比...

2019-11-12 20:22:21 158

原创 Leetcode 215. Kth Largest Element in an Array

题目链接:215. Kth Largest Element in an Array题目大意:给定无序数组求第k大,经典面试题题目思路:利用快速排序,每次定一个轴,比轴大的放左边,小的放右边,如果左边的数量小于k,则第k大在右边,反之在左边,每次去找就好了时间复杂度&&空间复杂度:O(n)(需要找的总共次数为n/2+n/4+…+1 = 2n-1次)&&O(1)...

2019-10-31 22:31:41 116

原创 Leetcode 45. Jump Game II

题目链接:45. Jump Game II题目大意:给你一个序列,里面的数代表从当前位置最远可以跳多少步,问经过最少多少步能够跳到末尾题目思路:这题跟Leetcode 55题差不多,只不过做了个最少多少步的优化。我们可以考虑这样一件事,每个点能够达到的最远步数为当前的位置加上步数,那么如果有一个点的最远步数超出了末尾,并且在前面的步数中又可以到达这一步,那么经过有限次迭代之后能够到达末尾,并且...

2019-09-22 16:20:53 137

原创 Leetcode 402. Remove K Digits

题目链接:402. Remove K Digits题目大意:给你一个数(用字符串表示),从这个数中最多删除k个数位,要使得删除后的数字最小题目思路:本质上我们需要维护一个单调上升的序列,例如41,我们会删除掉4而不是1,因为如果前面的数大于后面的数,那么我们宁愿删掉前面的数,以保证结果更小,所以我们实际上需要做的就是维护一个单调上升的栈,碰到一个数则删掉栈内比当前元素大的,只不过限定了k的个数...

2019-08-26 21:41:27 151

原创 Leetcode 2. Add Two Numbers

题目链接:2. Add Two Numbers题目大意:给你由两个链表组成得数,链表上得每个位置得值代表一个位得值,例如3->8->4就代表483这个值,然后两个链表相加,返回结果。题目思路:简单题,每次相加得时候记录一次进位就可以了,只不过处理链表得时候比较麻烦,具体看代码时间复杂度&&空间复杂度:O(max(n,m))&&O(n+m)(n,m分...

2019-08-18 21:21:51 145

原创 Leetcode 1162. As Far from Land as Possible

题目链接:1162. As Far from Land as Possible题目大意:给你一个01矩阵,只能上下左右走,每个0需要找到一个离自己最近的1,求这些最近距离中的最大值,全0则输出-1题目思路:水题,对每个0去BFS一次,最后找到最大距离即可时间复杂度&&空间复杂度:O(nn)&&O(nn)(n为矩阵个数)class Solution {pub...

2019-08-18 21:15:40 426

原创 Leetcode 1161. Maximum Level Sum of a Binary Tree

题目链接:2. Add Two Numbers题目大意:给你由两个链表组成得数,链表上得每个位置得值代表一个位得值,例如3->8->4就代表483这个值,然后两个链表相加,返回结果。题目思路:简单题,每次相加得时候记录一次进位就可以了,只不过处理链表得时候比较麻烦,具体看代码吧时间复杂度&&空间复杂度:O(max(n,m))&&O(n+m)(n,m...

2019-08-17 11:49:22 141

原创 Leetcode 1. Two Sum

题目链接:1. Two Sum题目大意:给你一个整数数组,问里面能不能找出两个数来使得他们对应的和为某一个具体要求的target值题目思路:简单题,因为保证只有一组这样的数据,所以每次读到一个数,先判断target-value对应的值是否已经出现过,是则寻找成功返回对于结果;否则打上一个标记标记该值存在并记录位置时间复杂度&&空间复杂度:O(n)&&O(max...

2019-08-17 11:38:41 116

空空如也

空空如也

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

TA关注的人

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