代码随想录
文章平均质量分 83
独孤旅者!
程序员一枚,多多关照
展开
-
代码随想录Day14
我们只需要返回root.val == val的这个结点就可以了,这里比较好的就是先判断root == null 和root.val ==val的情况,所以,一旦我们判断成功了,就不会再接着向下递归了,然后向上层返回一个根节点,然后一次不断返回,直到到最外层递归返回该root结点。否则,不为 null 的节点将直接作为新二叉树的节点。通过前序中序、后序中序构造一棵二叉树,主要是左闭右开原则,然后使用递归的方法,通过前序或者后序可以不断的将中序的二叉树 序列分成左子树和右子树,这就是突破口。原创 2023-04-20 18:00:28 · 38 阅读 · 0 评论 -
自刷代码随想录Day13
如果他的左子树为空,右子树高度为n,那么这棵子树的最小高度不能以0为标准,而需要以存在子树的部分为标准。该题的思路就是遇见叶子结点,就将路径中的元素拼成一个String放进res中,如果不是叶子节点就进去咯,但是进去后出来的时候需要删除该结点在paths中的路径,这就是回溯。该题方法挺多的,本次使用的是递归法,我们需要特别注意的是,对称不是所有结点的左右子节点都对称,而是根节点的左右子树对称,意思是我们需要比较两棵树的对称。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。原创 2023-04-18 14:21:28 · 52 阅读 · 0 评论 -
自刷代码随想录Day12
int val;} }原创 2023-04-17 14:06:15 · 36 阅读 · 0 评论 -
代码随想录Day11
我们需要自己造一个单调队列,队列里面的元素需要单调递减,存放的是我们一个滑动窗口中的元素的一个单调递减顺序,目前主要的注意力就是在进队,如果发现进队的元素大于队列队尾元素,则就尾元素出队,则直到进队这个元素的地方,前面窗口的中元素都小于该元素,所以可以将对列清空,在入队该元素。给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。出队操作,考虑到什么时候什么时候需要出队,就是该队首的元素已经滑到窗口外了,不属于滑动窗口中最大的元素了。返回一个表示表达式值的整数。原创 2023-04-13 11:34:05 · 86 阅读 · 0 评论 -
自刷代码随想录day10
该题主要是已经提供了栈的一系列操作(说明中已经说明了),不需要自己去构建栈的一些列操作,我们只需要实现的是用两个栈来实现一个队列的操作,没有复杂度,需要注意的就是当stcakOut为空是,需要将stackIn中的元素放到stackOut中,总归还是两个单独操作的栈,而不是说是一个数组维护的两头插入的栈。怎么去实现呢,我的理解是队列queueOne和queueTwo两个队列,每当要进栈,就进到有数据那个队列,每当要出栈,就将有数据的对列出队列,另一个队列进队列,直到第一个队列只剩一个元素,然后取出来。原创 2023-04-11 14:35:12 · 42 阅读 · 0 评论 -
自刷代码随想录Day09
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。KMP的思想确实难,其实也就是我们做next数组那个地方有点难以理解,后面还需要多看看,再做深入分析KMP。给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。完全通过观察next数组的规律来判定是否该字符串有某子串重复多次构成。若是重复多次构成,那么字符串长度%字串长度一定等于0。本题还可以使用滑动窗口来解决。原创 2023-04-11 10:19:02 · 43 阅读 · 0 评论 -
自刷代码随想录Day07
这道题的题解还是比较新颖的,它在map中存放的key值是这个key对应的value的值在数组中的值还差多少到target,如果找到这个差值,我们就找到了第二个数。2)set是一个集合,里面只能存放一个元素key值,这道题我们不仅需要y的值,还需要y值在nums数组对应的下标值,所以需要key-value键值对来存放。1)数组的长度受限,如果不能确定数组的长度我们就无法使用数组的数据结构,同时,如果数组长度很长(哈希值大),而元素很少,浪费空间严重,不建议使用数组。:答案中不可以包含重复的三元组。原创 2023-03-25 22:33:46 · 63 阅读 · 0 评论 -
自刷代码随想录Day06
哈希表的选取首先的要素就是要能把所有元素通过映射到哈希表中去,这里我们选取一个长度为26的数组,因为字符串中的元素都是小写字母,26个小写字母的ASSCI值是26个连续的值,所以我们可以将它们分别映射到0-25的数值上,正好对应上数组的下标。1)是否符合大海捞针的条件,我们要去对比每一个字符串t中的字符是否在字符串s中,相当于我们需要做t.length()次大海捞针的操作。1)终止条件:再次得到了一个之前重复的数,证明次数不快乐了,陷入了死循环,快乐不起来,得到了1,那么该数就是快乐数了,也就结束了。原创 2023-03-24 22:44:11 · 39 阅读 · 0 评论 -
自刷代码随想录Day05
(快慢指针的差值可以以固定速度变化,这也是第一次遇到,slowIndex以速度为1前进,fastIndex以速度为2前进,如果链表中存在环形,那么快指针指定会在环形中与慢指针相遇(至于相遇时,快指针跑了多少圈我们先不管他))果不其然,我没有考虑到我们给出的数据,就是以数组形式给出的,数组中的值也就是对应下表的节点的val值,如果我们设置的特殊值与数组中的值撞车了,那么也就顺其自然的失败了。我们此时再用快慢指针(此时快慢是位置上的快慢,移动速度相同),同时移动到两个节点相同就行了。(day04那道题)原创 2023-03-23 11:28:54 · 39 阅读 · 0 评论 -
自刷代码随想录Day04
2)我们要考虑当快指针比慢指针快n-1时,也就是n正好等于链表长度,那么我们要删除的就是head的那个节点,我们在正常删除节点的时候,此时又有个特殊情况,如果这个链表就只有一个head节点,也就是n和链表长度都等于1的情况,我们删除的方法又是和常规操作不一样的。要求出两个链表相交的开始,我们知道相交之后的所有部分,他们的节点时相同的,就意味着我们需要尾对齐,更长的链表,链表前的部分肯定是不符合要求的,算了这个还是直接上图比较清晰。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。原创 2023-03-22 21:26:37 · 45 阅读 · 0 评论 -
自刷代码随想录Day02
这道题首先我们可以选择暴力解法,也就是使用两个for循环,一个循环进行遍历值等于val的元素,另一个循环做赋值,也就是后面覆盖前面元素的操作,显然这样的时间复杂度为O(n*n),但是该题只限制了空间复杂度而没有限制时间复杂度,是可以行得通的。通常情况下,我们需要对一个数组的元素操作,然后生成另一个数组,我们可以考虑快慢指针,快指针(一个或者两个)在原数组跑,慢指针视情况在新数组或者原数组上跑(题1为在原数组上跑、题2为在新数组上跑)。数字的平方,当两个数的平方一样时,也是需要返回的。元素的顺序可以改变。原创 2023-03-20 19:55:57 · 51 阅读 · 0 评论 -
自刷代码随想录Day01
两题的特点都是需要判断target的值在数组的中位置,同时告诉时间复杂度为logn,我们在遇见logn的时间复杂度要有意识的想起二分查找。解题心得:我最开始忽略了时间复杂度,然后在找到任意一个target的值,就开始使用两个while循环,左右移动,直到不为target为止,显然不能满足时间复杂度为logn的条件。二分法是非常重要的一种算法,在实际应用中非常广,解题思路其实也是比较简单,我们主要是需要学会辨认二分查找和在一个比较难的算中,某一个部分可以使用二分查找来简化算法。原创 2023-03-19 20:48:33 · 31 阅读 · 0 评论