leetcode
文章平均质量分 50
Pr Young
一个踏实努力,充满激情的程序员!
展开
-
leetcode12 整数转罗马数字
再和1000比,比1000小,于是去和900比,比900大,于是添加CM,994变成94......1994 先是和1000比,比1000大,于是添加一个M,然后1994变成994。tags:字符串 模拟题。原创 2023-07-21 15:43:09 · 71 阅读 · 0 评论 -
leetcode13 罗马数字转整数
对于每个字符,都要去查找它右方的字符,如果右方字符比当前字符大,那就要变成负数了(比如100变成-100)一般来说,都是数字大的放左边,数字小的放右边,比如 XXVII 27 依次是10 10 5 1 1。但也有一些特例:: 4的话,不是||||,而是IV。tags:HashMap 字符串。9的话,不是V||||,而是|V。原创 2023-07-21 12:11:23 · 62 阅读 · 0 评论 -
leetcode 6 N字形变换
先new一个List出来,List中有nums个StringBuilder,然后对于字符串s中的每一个字符判断一下这个字符应该放到哪个StringBuilder里去。tags:字符串 模拟题。原创 2023-07-21 10:53:52 · 74 阅读 · 0 评论 -
leetcode8 字符串转整数
这个代码能过1078/1084个测试用例。原创 2023-04-26 00:01:26 · 64 阅读 · 0 评论 -
经典N皇后
不能同行,同列,也不能同45度斜线。原创 2023-04-24 16:06:46 · 49 阅读 · 0 评论 -
全排列,子集,组合问题总结
都是到达条件就进行收集,而不是return返回。原创 2023-03-30 11:53:12 · 49 阅读 · 0 评论 -
leeetcode77 组合
这里从1开始而不是从0开始,是因为题目让你做的事返回1-n中所有的k个数的组合,所以需要从1开始。原创 2023-03-30 10:51:47 · 49 阅读 · 0 评论 -
leetcode子集问题
所以需要控制后面加进来的数必须索引比前面的数索引大,所以需要增加一个参数index来进行控制。如果你想dfs中传递尽量少的参数,可以将result和tempList设置为全局变量。如果这样写代码,[1,2,3]和[3,2,1]其实只算一个子集,但是你算了两遍。原创 2023-03-30 01:24:22 · 50 阅读 · 0 评论 -
全排列问题
收集满了之后,添加进result的时候,不是添加0 1 2,而是添加nums[0],nums[1],nums[2]解题思路,虽然数字可以重复,但是数字的索引一定不会重复,索引一定是0,1,2,3,4.....for 选择 in 选择列表 //也就是列举每一个可以被选择的数。如果相等,说明已经找到了一个完整的排列,将其添加到。路径.remove(刚刚添加进路径的数)在全排列|的基础上 加了一个有重复数字的条件。,对于每个元素,检查它是否已经在。数组的长度,遍历输入数组。在回溯函数中,首先检查。原创 2023-03-29 22:25:30 · 255 阅读 · 0 评论 -
如何输出HashMap,TreeMap中的键值对
无法通过索引的方式输出HashMap,TreeMap中的键值对。原创 2023-03-29 12:14:34 · 209 阅读 · 0 评论 -
TreeSet相关算法题
【代码】TreeSet相关算法题。原创 2023-03-29 10:00:03 · 50 阅读 · 0 评论 -
翻转链表专题
这个专题总共有四道题目206 翻转链表92 翻转链表某个区间(翻转链表||)24 两个一组翻转链表25 k个一组翻转链表原创 2023-02-27 22:07:43 · 230 阅读 · 0 评论 -
leetcode933 最近请求次数 双端队列
【代码】leetcode933 最近请求次数 双端队列。原创 2023-02-26 23:06:58 · 81 阅读 · 0 评论 -
leetcode406 根据身高重建队列
step2:现在要进来一个人(一个数对),这个数对中第二个元素就是它要插入到结果集中的位置,比如这个数对是[6,1],那这个人就被插入到结果集中索引为1的位置(也就是第二个位置),如果这个位置上已经有人了,这个人就要被挤到后面去。step1:先将数对进行排序,按照数对的元素 1 降序排序,数对的元素 2 升序排序。这是一道贪心算法:够贪心的矮个能够站在高个面前,这样他前面就没有人比他更高了。原创 2023-02-26 19:18:52 · 53 阅读 · 0 评论 -
leetcode135 分糖果
最后返回sum+nums.length,要加上nums.length就是每个位置一定会获得一块糖果。(3)每个位置除了固定得到的1块糖果,额外应该分得的糖果数就等于这个位置左右坡度的更大值。比左边相邻的元素大,左坡度就等于左边相邻元素的坡度+1。比右边相邻的元素大,右坡度就等于右边相邻元素的坡度+1。不比左边相邻的元素大,左坡度就等于1。不比右边相邻的元素大,右坡度就等于1。原创 2023-02-24 23:48:19 · 76 阅读 · 0 评论 -
二叉树两个指定结点的最近公共祖先
【代码】二叉树两个指定结点的最近公共祖先。原创 2023-02-24 21:51:09 · 57 阅读 · 0 评论 -
leetcode剪绳子 (一道数学题)
/解释一下题目:绳子长度为n,切成a段,即n=n1+n2+n3+......+na。//(2)当最后一段长度为1的时候,则一份3和剩下的这份1(即3+1)变成2+2。//现在要求的是:max(n1*n2*n3*.......*na)都是将一个数拆成几个数之和,使得这几个数乘起来乘积最大。剑指offer14 剪绳子 是一摸一样的。,这样还剩下最后一段的长度可能是0,1,2。//(1)当最后一段长度为2的时候,保留。原创 2023-02-24 18:10:26 · 163 阅读 · 0 评论 -
leetcode151 反转字符串中的单词
依次将str数组中最后一个字符串到第一个字符串全部添加到result这个StringBuilder里面。这道题要注意每个单词内部不反转,blue不会变成eulb,还是blue。\s+表示不管中间多少个分隔符都要删除。\s表示以空格作为分隔符。原创 2023-02-22 20:50:38 · 67 阅读 · 0 评论 -
leetcode丑数专题
其实就是看这个数是不是可以分解成2的n次方*3的m次方*5的k次方的形式。263 判断一个数是不是丑数。原创 2023-02-22 19:28:11 · 68 阅读 · 0 评论 -
leetcode1143 最长公共子序列LCS
s2.charAt[j-1]的时候,dp[i][j]=max(dp[i][j-1],dp[i-1][j])(2)判断s1第i个字符和s2第j个字符是否相等:是s1.charAt(i-1)==s2.charAt(j-1)当s1.charAt(i-1)==s2.charAt[j-1]的时候,s1第i个字符等于s2第j个字符。求dp[i][j]需要根据dp[i-1][j-1]或者dp[i][j-1]+dp[i-1][j](1)dp[i][j]表示考虑s1前i个字符,考虑s2前j个字符。原创 2023-02-21 19:49:25 · 431 阅读 · 0 评论 -
通过求二叉树最大深度来理解递归
从原问题出发,把问题不断分解成更小的子问题,由于子问题的规模比原问题小,所以不断的分解总会有个尽头,也就是递归的边界条件base case,到达边界条件就要返回答案。整棵树的最大深度=max(根节点左子树的最大深度,根节点右子树最大树)+1。子问题和原问题是相似的,子问题需要把计算结果返还给上一级问题。大问题分解成小问题就是递,小问题的答案传给大问题就是归。这个问题里的边界条件就是小问题是空节点,直接返回0。子问题:计算左子树(右子树)的最大深度。原问题:计算整棵树的最大深度。原创 2023-02-20 16:20:37 · 103 阅读 · 0 评论 -
leetcode124 二叉树最大路径和
dfs的功能只是返回一边,而不是两边,最后返回的左边或者右边这条路径。左子树的最大路径和+右子树的最大路径和+root的值。在dfs内部求出temp=左边+右边+root。找到root根节点+左子树的最大路径和,dfs函数的功能:传入root结点,root根节点+右子树的最大路径和。求出这两个数中较大的那个。原创 2023-02-19 16:59:12 · 83 阅读 · 0 评论 -
leetcode470 用Rand7()实现Rand10()
4个二进制位就可以保证等概率返回(最小是0000,最大是1111十五)0,1,2,3,4,5,6,7.......15。第二步:要生成的是1~10,我们先生成0~9(然后加1即可),怎么由我们第一步得到的0~1生成0~9呢?调用Rand7()函数,随机等概率生成1,2,3,4,5,6,7。3个二进制位可以保证等概率返回0,1,2,3,4,5,6,7。这时我们设置:生成1,2,3(也就是小于4)的时候,我们的。生成4,5,6(也就是小于4)的时候,我们的。2个二进制位可以保证等概率返回0,1,2,3。原创 2023-02-11 21:26:04 · 943 阅读 · 0 评论 -
加减乘除运算符的优先级高于位运算的优先级(极易出错)
我开始认为下面的表达式等于a乘以4,加上b乘以8,加上c乘以4,等于4+16+12=32。然后就变成a原创 2023-02-11 21:02:29 · 341 阅读 · 0 评论 -
hot100 leetcode5 最长回文子串
help函数的功能是求出以l,r为中心向两边扩散,最长的回文字符串(返回值是这个最长的回文字符串,而不是最长回文字符串的长度),help函数里面主要是一个while函数,跳出while函数说明左指针和右指针指向的字符不相等了,求出此时的字符串。注意回文子串的性质,一个回文子串去掉第一个字符和最后一个字符,剩下的字符串依然是回文字符串,s[i]~s[j]如果是回文子串,当s[i-1]==s[j+1]的时候,s[i-1]~s[j+1]也是回文子串。根据dp[i+1][j-1] 推出dp[i][j]原创 2023-02-09 23:51:24 · 294 阅读 · 0 评论 -
归并排序mergeSort
代码其实核心就是一个合并函数merge函数,合并两个有序数组。归并排序要先分解再合并。原创 2023-02-05 20:33:22 · 94 阅读 · 0 评论 -
快速排序quickSort
所以当右边的数比pivot小的时候,此时右指针应该停下来,将右指针指向的值赋值给左指针指向的位置,nums[left]=nums[right]当左边的数比pivot大的时候,此时左指针应该停下来,将左指针指向的值赋值给右指针指向的位置nums[right]=nums[left]所以第一趟排序后的结果是15,21,12,43,60,52 选D。右边的数应该比pivot大,左边的数应该比pivot小。最后左右指针相遇,将pivot赋值给此时指向的位置。最后将pivot填到空的位置。原创 2022-10-07 18:22:38 · 1787 阅读 · 0 评论 -
leetcode图算法
也就是说找出从起点0到终点n-1,总共有多少种不同的路径。其实就是「邻接表」表示的一幅图,,请你计算所有从节点。原创 2023-02-04 22:18:03 · 136 阅读 · 0 评论 -
各种排序算法
第一轮确定nums[0]的值,后面发现比nums[0]小的值,就将这个数和nums[0]进行交换。第一轮确定nums[1]的值,后面发现比nums[1]小的值,就将这个数和nums[1]进行交换。一共需要数组长度-1轮。原创 2023-01-28 00:35:10 · 40 阅读 · 0 评论 -
贪心算法的题目
有a个y,b个o,c个u,用这些字母拼成一个字符串,三个相邻的字母you则可以获得2分,两个相邻的字母是oo则可以得到1分(注意如果四个o:oooo,这种情况是得3分的而不是两分),问最多可以得到多少分?//current表示滑到哪个会议了(第0个会议,第1个会议,第2个会议......),然后重复上面的步骤,继续弹出两个数,进行结合,将得到的数继续放到小根堆里面去......重复步骤1,2,直到区间集合为空,之前选出的那些x的数量就是最多可以参加的活动数。(1)哪个会议开始的早就参加哪个会,一直贪下去。原创 2023-01-26 17:32:28 · 2499 阅读 · 0 评论 -
刷leetcode常用的一些库函数
1.比较两个数大小,求出更大的数或者更小的数。原创 2023-01-26 11:06:17 · 93 阅读 · 0 评论 -
并查集UnionFind
两个结点是否属于同一个集合 bool find(a,b),或者说查询某个结点是否属于某个集合。p[x]是x的集合编号,p[y]是y的集合,p[x]=y,也就是说x的父节点变成y。基本原理:每个集合用一棵树来表示,树根的编号就是整个集合的编号,p[x]表示x的父节点。将同一省份的城市都加入到同一个集合,最终有多少个省份就会有多少个不相交集合。如何求x的集合编号::只要x不是树根,就一直找父节点,直到找到根节点。将一个集合的根节点成为另一个集合根节点的孩子节点。并查集是一个支持集合快速合并的结构。原创 2022-12-13 15:09:16 · 274 阅读 · 0 评论 -
将一个乱序数组变为有序数组的最少交换次数
然后再将这个数组传进方法内,就行了。原创 2022-12-13 14:02:39 · 1335 阅读 · 0 评论 -
字符串的回文子串问题
(2)中心点一共有多少个?并不是和字符串长度length相等,而是2*length-1个,length个单字符作为中心,len-1个双字符作为中心(比如baab,就可以以双字符aa作为中心)(1)什么是中心点?中心点即 left 指针和 right 指针初始化指向的地方,可能是一个也可能是两个。abba 有7个中心点,分别是 a、b、b、a、ab、bb、ba,四个单字符作为中心,三个双字符作为中心。aba 有5个中心点,分别是 a、b、a、ab、ba,三个单字符作为中心,两个双字符作为中心。原创 2022-12-11 15:03:09 · 191 阅读 · 0 评论 -
Leetcode经典题 LRU缓存
此时如果你push 3进去,此时超出了cache的容量,于是需要移除最不常用的2(也就是处在队尾的是最不常用),然后将3放进去,此时队列是3,1,由于3是刚刚put进去的,所以3处于队首,1处于队尾。3.这道题目其实就是就是让你写两个方法,get方法和put方法,get方法是给定某个结点的key获取这个结点的value,put方法是把某个结点添加进队列里面。4.这道题目还在队列的前后各自加了一个dummy结点(head,tail),dummy结点并不会真的用到,但是有这两个结点,很多操作会变得很容易。原创 2022-12-10 12:22:22 · 294 阅读 · 0 评论 -
前缀树trie树
具体实现的时候是1个结点里面有一个长度为26个字母的数组kids[0]==null表示子节点中不含有‘a’这个字符。然后search("apple") 返回的是true 也就是说apple是曾经插入的单词。1.前缀树的每个结点有26个子节点,分别装a,b,c,d,e,f........startwith是不用是曾经插入过的单词,只要包含就可以。也就是说search方法判断的是是否曾经插入过一个单词。search("app"),返回的就是false。先往前缀树中插入单词apple。原创 2022-12-09 11:23:18 · 72 阅读 · 0 评论 -
接雨水问题
每个位置能装的水=Math.min(A,B)-height[i](有可能Math.min(A,B)>height[i],即Math.min(A,B)-height[i]原创 2022-12-02 10:17:48 · 56 阅读 · 0 评论 -
leetcode杂题收录
假设已经有两个数:first,second (比如first=2,second=5),我们现在希望找到一个比5大的数。如果是第三种情况:说明找到了递增三元序列,return true。如果是第二种情况:更新second,second=num。如果是第一种情况:更新first,first=num。334 递增的三元子序列。原创 2022-11-29 11:57:10 · 53 阅读 · 0 评论 -
二维矩阵 路径问题
63 不同路径||原创 2022-10-12 10:01:05 · 134 阅读 · 0 评论 -
二叉树路径问题
叶子节点 temp+root.val。113 二叉树中和为target的路径,也叫路径总和||核心:非叶子节点 temp+root.val+"->"判断二叉树中是否存在和为target的路径。找出二叉树中所有和为target的路径。257 二叉树的所有路径。原创 2022-10-11 19:34:38 · 110 阅读 · 0 评论