刷题
刷题记录
hz52_
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
12-15翻转二叉树的奇数层
根据完美二叉树的层次反转规则,即左边排第一的元素与倒数第一元素进行交换,第二个元素与倒数二个元素交换,此时root1 的左孩子与 root2 的右孩子可能需要进行交换,root1的右孩子与 root2 的左孩子可能需要进行交换。我们用 isOdd 来标记当前层次是否为奇数层,由于偶数层不需要进行交换,当 isOdd 为 true 时,表明当前需要交换,我们直接交换两个节点 root1,root2 的值;时间复杂度:O(n),遍历每一个节点,需要的时间为O(n)使用深度遍历,递归。原创 2023-12-15 18:48:08 · 117 阅读 · 1 评论 -
12-08滑动窗口
使用HashMap来记录当前遍历情况下的所有出现字母索引的最新情况,如果出现了一个字符在map中存在,判断这个字符的索引是否大于start,如果大于,说明是在当前的最大字符串中,所以从字符索引的下一字符重新开始,如果不在,则不管。但是可以发现,使用一个一个滑的滑动窗口会有很多无效循环,比如abcddfghj,d出现重复,但是在abcd中的最后一位,一位一位的滑,会导致b、c、d开始的滑动其实都无意义。技巧:用整数数组来存储字母,易于比较,不用考虑字母顺序。*将ch的索引值更新,保证它的索引为最新情况。原创 2023-12-11 09:22:35 · 123 阅读 · 1 评论 -
23-12-05 双指针 12-07dfs、差分数组、双指针
若nums[i]+nums[l]+nums[r]=0,将该组合添加到list,然后判断l的右边是否与l相等,若相等,则跳过,r的左边亦是,让l、r都跳到不相等的下一个数。自己的方法,使用了双指针,但是代码不优美,效率也不高,但话锋一转,虽然效率不高,但是自己做出困难题还是有成就感的。*若nums[i]+nums[l]+nums[r]<0,l++*若nums[i]+nums[l]+nums[r]>0,r--再判断该开头是否与前一个数相同,若相同,则跳过此次遍历,去重;*from<k<to,不管。原创 2023-12-07 16:58:19 · 117 阅读 · 1 评论 -
23-12-01
遍历arr[i],通过哈希表键值找到对应的下标,更新c1和c2。然后c1和c2来对应每行每列标记的个数。使用哈希表来将mat与下标i,j对应。原创 2023-12-01 22:27:23 · 93 阅读 · 1 评论 -
23-11-28
我采用了left.size()=right.size()||left.size()=right.size()+1。但其实在做的过程中,发现允许right比left大1会更简单,因为pushmiddle和popmiddle的时候,若不为正中,都取的中间两个靠前的数,所以允许后端的队列长更合理。比如:如果此时是left=right+1,pushmiddle,需要先把left尾巴给right在添加在left后面,而如果是right=left+1,可直接添加到left尾巴上。如果是首、中、尾,需要两个双端列表。原创 2023-11-29 22:53:42 · 89 阅读 · 1 评论 -
23-11-30
在做题过程中陷入了误区,光是想着要每次都一步到位,l要向右找到更大的和r向左找到更大的,然后比较,可以实现,而且及时找到了,也不一定是比开始的更大,也要与max进行比较,还不如简化问题,每次移动l、r中较短的。下述代码优雅和简洁。然后统计每个字符出现的个数,再比较两者的出现过的现有字符是否一样,如果不一样,返回false。如果一样,直接对统计的个数进行排序,若从小到大个数相等,则返回true。分为两个部分,使用小根堆+无穷的连续数,又因为小根堆无法去重,我们设置一个vis来保证不重复。原创 2023-11-30 16:05:32 · 70 阅读 · 0 评论 -
23-11-27
注意⚠️:在计算左边界或者右边界时将一侧设置为求解小于等于E的元素,目的是为了解决当一个子数组中有两个最小值元素时(比如[3,1,2,4,1]中有两个1),不重复且不遗漏地统计每一个子数组。——>如何确定个数,找左右边界left、right,贡献值为arr[i]*(i-left+1)(rgiht-i+1),将每个arr[i]的贡献值相加。利用单调栈向左找到第一个比A[i]小的数A[left](遍历顺序为0->n-1),也就是辐射范围的左边界;采用逆向思维,找每一个arr[i]作为最小值的子数组的个数。原创 2023-11-28 16:05:25 · 110 阅读 · 0 评论 -
23-11-25
思路:用dfs遍历树,用status表示数字状态(0为偶次,1为奇次),到叶节点时进行判断。status用来统计数字出现的奇偶次数(使用位运算)1、排序+查看连续(但是排序算法时间复杂度不满足)由题意可知,出现奇次的数至多只能有一个。HashSet,无重复元素。原创 2023-11-25 19:43:57 · 77 阅读 · 0 评论 -
23-11-24
toCharArray()是将一个字符串内容转换为字符数组。确定右端点,在左侧不断查找合格的点。原创 2023-11-24 22:29:06 · 94 阅读 · 1 评论 -
23-11-23力扣(stringbuilder+)
StringBuffer是一种可变的字符串类,即在创建StringBuffer对象后,我们还可以随意修改字符串的内容。每个StringBuffer的类对象都能够存储指定容量的字符串,如果字符串的长度超过了StringBuffer对象的容量空间,则该对象的容量会自动扩大。每日一题:1410HTML实体解析器,containsKey和get用法。100题(1两数之和):创建一个哈希表,对于每一个。前者为不可变字符、后两者为可变字符。插入到哈希表中,即可保证不会让。,我们首先查询哈希表中是否存在。原创 2023-11-23 16:53:19 · 88 阅读 · 0 评论 -
2023.11.13-线段树
答案并不是,而且恰好相反,只有在我们遇到第 4 类问题,不得不写「线段树」的时候,我们才考虑线段树。多次将某个区间变成同一个数,求区间和:「线段树」、「树状数组」(看修改区间范围大小)这样看来,「线段树」能解决的问题是最多的,那我们是不是无论什么情况都写「线段树」呢?多次修改某个区间,求区间和:「线段树」、「树状数组」(看修改区间范围大小)多次修改某个数(单点),求区间和:「树状数组」、「线段树」数组不变,求区间和:「前缀和」、「树状数组」、「线段树」多次将某个区间变成同一个数,用「线段树」原创 2023-11-16 11:19:55 · 89 阅读 · 1 评论
分享