![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
刷题
文章平均质量分 54
刷题记录
信号响应中
这个作者很懒,什么都没留下…
展开
-
代码随想录第11天
为什么不用快排呢, 使用快排要将map转换为vector的结构,然后对整个数组进行排序, 而这种场景下,我们其实只需要维护k个有序的序列就可以了,所以使用优先级队列是最优的。维护了一个单调队列,但实际也是比较上一次的最大值和新滑入的最大值,以此为此一个单调队列。思路基本差不多,但是没想到的点是,其实结果也是可以压入栈的,这样更加简洁.用栈缓存数字,碰到运算符就计算得到结果,需要注意一下字符串,运算符的判断。只要比较新滑入的数和前一个窗口的最大数的大小;注意数据结构Dqueue的使用.⚠️小顶堆的构建方式。原创 2024-08-09 08:27:49 · 125 阅读 · 0 评论 -
代码随想录第十天
栈和队列基本知识。原创 2024-08-08 20:09:19 · 113 阅读 · 0 评论 -
代码随想录第9天
还是想到开辟新空间,如果想要空间复杂度O(1)也可以参考上一题的全部反转,再前k个字符自己内部反转,剩下的字符再反转.正确的思路:参考昨天第一题的反转字符串,首次反转全部元素,然后针对具体单词再做针对性反转.(Java不能在字符串上修改,所以使用java一定要开辟新空间)第一想法是开辟另一个存储空间,从后往前塞....参考上一题通过两指针交换字符好像也不行.如果是C++,需要注意移除空格操作.但是如果要求空间复杂度。KMP已经忘了,复习一下.呢,会不会有更好的做法?原创 2024-08-06 07:51:38 · 207 阅读 · 0 评论 -
代码随想录第八天
想到一个比较复杂的快慢指针法,就是2k个元素是一个窗,在一个窗里fast走k步,slow在起始,如果属于前k,那么定义个指针i在fast和slow区间内做反转.其实在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的.哈哈哈,果然是有优化空间.字符串是若干字符组成的有限序列,也可以理解为是一个字符数组,但是很多语言对字符串做了特殊的规定,接下来我来说一说C/C++中的字符串。两个指针,左右互换,需要注意的细节应该是循环的条件.原创 2024-08-05 23:04:49 · 294 阅读 · 0 评论 -
代码随想录第七天
如果用哈希法的话,是不是可以初始化一个map,key是数组1,数组2排列组合的sum,然后value是对应的元素列表,如果有相同的则不存入map(不可以包含重复的三元组).可以用set存magazine的字符,然后从 ransomNote循环set是否有当前字符,注意set的常用操作。这里代码随想录用的是数组,消耗更小,有个技巧是string里面-'a',获得字母位置;能想到时间复杂度O(n),放在这个专题能很明显地想到,有个要点是只需要输出个数.这里提了另一种更高效的做法,就是用双指针法.原创 2024-08-05 22:38:36 · 267 阅读 · 0 评论 -
代码随想录第四天
如果不相交,那么它们永远不会指向相同的内存地址。一旦某个节点相同,那么后面的链表部分也必然相同,如下面,这个如果head链表和headB中3开始相同,那next..... next->next->next... 这一坨都是一样的,所以不会出现后面又开始分叉的情况。这道题应该是有点奇怪的,看了一下代码随想录,只提到不是比较值相同,而是指向相同,再看了一下评论区,对指向相同有了更多的理解.定义快慢指针,每次都让快指针比慢指针快一步,然后让快指针循环到最后,判断一下快指针的next是否是等于慢指针所在的节点.原创 2024-08-04 13:55:15 · 708 阅读 · 0 评论 -
代码随想录第三天
一开始写的时候return了cur,debug了半天是空的咋办,没想到可以返回pre.....应该会有一个临时节点用来串联,但是后面的已经和前面断了,怎么连回去呢哈哈哈哈。今天的题比较简单,然而为什么我这么多细节没注意好,老是要debug才能发现.比较容易做,但是细节和边界应该不太好把握。想法同题目一,感觉也是会有一些细节问题。头结点注意好即可,实现上不算很多困难。这个先后顺序问题就能解决自己的疑惑。实现起来也比较简单,没什么难度。原创 2024-08-02 23:10:15 · 142 阅读 · 0 评论 -
代码随想录第二天
是可以想到的解法,但是自己写得比较啰嗦,题解里面有个精髓,通过变更i,保留之前的计算结果,这是我没有想到的,我只想到了指针的位置可以不动,hhhhh。这个题目也很常见,但是怎么找规律这个确实是问题,能想到的就是循环结束条件时怎么样的?这个题目还是比较简单,很容易想到解法,但是实现起来挺多细节需要注意的,后面刷到贪心或者动态规划时,可以拿来做比较看看。1、可以在while外面进行累加,这样的话就确确实实是对数组元素进行操作,而在超过目标值时,又通过减去多余的元素得到子序列和;原创 2024-07-30 22:44:58 · 138 阅读 · 0 评论 -
代码随想录第一天
1、在处理中间值大于目标值时,其实这里已知中间值大于目标值是可以直接让right=middle-1的,而不是right=middle.每次选择数组1/2的元素与target做比较,如果是大于target,则取右边数组,如果是小于target,则取左边数组;2、左闭右闭和左开右闭,两种写法不一样,需要注意.感觉认准一种方法更好,理解后总结成自己的模板。这个题目第一眼看很容易想到暴力解法,如果要求不使用额外的空间,也是很容易想到的。没什么困难,双指针还是很好实现的,这个指针怎么定义其实是很关键的.原创 2024-07-30 22:30:57 · 399 阅读 · 0 评论