
刷题
文章平均质量分 91
会挑选经典题目,算法,知识点等
枪兵自古幸运e
这个作者很懒,什么都没留下…
展开
-
分治-快排思想题集1
当右边区域的元素数量小于k时,那说明第k大的元素不在该区域内,此时如果中间区域加上最大区域的元素个数大于k,那么说明第k大的值在中间区域,直接返回中间区域的任意一个值即可。当最小区域的数大于k的时候,那我们继续对最小区域的数进行排序,直到中间区域加上最小区域的数大于等于k,那我们就可以直接返回(因为题目中不要求有序,所以符合条件就直接返回),如果左区域和中间区域的元素个数小于k,那我们就只对右区域的(k- a-b,a,b分别为左,中区域的元素个数)个数进行排序即可。大家有兴趣可以看一下,原创 2024-04-15 18:48:48 · 1028 阅读 · 0 评论 -
滑动窗口题解2
来记录right遍历的时候存入的有效字符。什么是有效字符,比如p的字符个数为2,那么我们用滑动窗口遍历字符串s的时候,如果这个字符在mapP中,并且mapS的该字符个数小于等于mapP时我们就count++,如果遇到的字符不在mapP中count就不++。当我们再2开始遍历的时候可以发现和从0开始遍历是相同的,因此到2的时候就无需再遍历一次了。这道题的思考点在于如何直到是否有两种以上的不同数字,我们可以用map,如果map.size()没有超过2,那么继续往里面加,如果超过2那么就左移left。原创 2024-04-15 18:48:38 · 755 阅读 · 1 评论 -
数组划分,双指针
代码中,要先让desc == -1,防止数组第一个元素是0,如果arr[cur]不为0,那就让desc++,并且,我们提到,数组左边到desc是非0区,所以如果遍历到的不是0,那么就要放到非0区,而放到非0区的做法就是交换desc后一位元素和当前元素的位置。因此,desc指向的是非零元素的最后一个元素。这个时候分析案例可知,有个特殊情况,当快指针在倒数第二个位置时,慢指针为0的话,此时快指针会走两步,那么快指针就会越界,这种情况下,当我们在复写的时候,末位置的0不需要复写,因为我们处理完这种特殊情况即可。原创 2024-03-24 23:02:40 · 708 阅读 · 2 评论 -
链表精选题集
上面说过,如果改变某一个节点的指向时,那么这个节点之后的可能就会丢失。这道题就按常规思路来解题,我们要想判断两个链表是否相交,那我们就要看他们是否有相同的节点,如果有的话,那么这个节点及其以后的都一样,只是这个节点前的部分不一样,假设有个指针指向节点A,另一个指针指向节点B,如果两个链表相同节点前部分长度相同,那么只需要A,B走相同步数就可以走到相同节点,但是如果长度不一样差了n步,那么我们就可以先让长的链表先走n步,之后两个链表再一起走,如果A==B那么说明两个链表相交,否则不相交。原创 2023-12-30 20:53:23 · 996 阅读 · 4 评论