Leetcode and Niuke
文章平均质量分 73
刷题笔记.
暂停更新
暂停更新。
展开
-
Leetcode:144.二叉树的前序遍历,94.二叉树的中序遍历,145.二叉树的后序遍历(非递归实现)
1:二叉树的前序遍历非递归实现我们可以按照访问左路结点–>左路结点的右子树顺序访问.就是遇到一个结点就将这个结点入栈,并将该节点放入到vector中.,当cur退出循环的时候,就说明对于这棵树来说根和右子树已经被访问完了.1:中序遍历的顺序为左子树–>右子树–>根,将遍历到的所有结点都入栈,但是不访问.,当cur退出第一次循环的时候,就说明该树的左子树已经访问了,此时我们可以访问根,即将放入vector,然后访问右子树.输入:root = [1,null,2,3]输入:root = [1,null,2]原创 2023-04-05 17:18:07 · 334 阅读 · 2 评论 -
Leetcode105.从前序遍历与中序遍历构造二叉树
输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]4:当左右子树创建完毕后,此时便会回溯到第一个函数栈帧中右子树递归完毕的位置,此时我们要返回根结点.1: 用前序数组去创建根,然后遍历中序数组,找到与根创建相同的结点,并记录这个结点的下标.2: 通过这个下标就可以找出左右区间,左子树的根一定在左区间,右子树的根一定在右区间.输入: preorder = [-1], inorder = [-1]输出: [3,9,20,null,null,15,7]原创 2023-04-03 17:24:48 · 117 阅读 · 1 评论 -
Leetcode:106.从中序与后序序列遍历构造二叉树
1:从中序与后序序列遍历构造二叉树与中序与前序序列遍历构造二叉树不同的是,前序遍历的顺序遵循根–>左子树–>右子树,但是后序递归。输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]的顺序为左子树–>右子树–>根.所以根据后序遍历,我们应该按照根–>右子树–>左子树的顺序创建树.2:通过这个根确定左右区间,左子树的根一定在左区间,右子树的根一定在右区间.输出:[3,9,20,null,null,15,7]2: 遍历后序数数组时应该从后往前遍历创建根.原创 2023-04-03 18:48:25 · 417 阅读 · 11 评论 -
Leetcode: 236.二叉树的最近公共祖先
5:如果递归到一棵树的左右子树都为空,并且依旧还没找到,就说明这个结点root绝对不是目标结点的公共路径,所以要将这个结点出栈.并返回false.b : 当得到两个结点的祖先路径,我们要将保存两个结点中祖先路径较长的栈出栈,直到和另一个栈的路径长度相等.( 出栈的结点一定没有公共祖先).输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1。输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4。原创 2023-04-01 18:32:46 · 948 阅读 · 2 评论 -
Leetcode:150.逆波兰表达式求值,155.最小栈 牛客:JZ31.栈的压入,打弹出序列
例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。由于是[1,2,3,4,5]的压入顺序,[4,3,5,1,2]的弹出顺序,要求4,3,5必须在1,2前压入,且1,2不能弹出,但是这样压入的顺序,1又不能在2之前弹出,所以无法形成的,返回false。:如果正常栈的栈顶和最小的相同,辅助栈出栈,栈出栈.否则的话,辅助栈不出栈,栈正常出栈。输入:tokens = [“2”,“1”,“+”,“3”,“*”]原创 2023-03-12 15:34:24 · 274 阅读 · 2 评论 -
Leetcode:17.电话号码的字母组合,118.杨辉三角,136只出现一次的数字
2:对于Combine函数,我们要传digits映射对应下标的字符串,需要变量di(不能用引用,因为回溯时是回到上一层,而此时的di已经为上一层的di了)记录字符串的串数(抽象看也叫二叉树的层数从0开始),然后要将存放结果的vector传过去,并且我们还需要String combineStr 来存储对应数字下标的字符串,并且还需要利用combineStr的返回值进行组合字符串。输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]输入:nums = [2,2,1]原创 2023-03-04 01:01:21 · 379 阅读 · 1 评论 -
Leetcode:125.验证回文串,917仅仅反转字母,387字符串的第一个唯一字符
为了代码的可读性,设置多个功能独立的函数。编程思路采用先总后合,先概括实现目标进而设置实现方法。原创 2022-11-04 11:07:11 · 946 阅读 · 10 评论 -
链表常规OJ
方法一:找位置遍历遇到删除的就删除; 方法二:在新的链表对符合条件的删去,不符合的连接指针移位; 方法三:哨兵链表1:哨兵位的链表可以防止部分空指针的情况,但是要记住返回头指针的下一位,但是要返回原来的链表;2:删除时要牢记需要移位,和需要连接的两种情况;需要移位,一定要新设指针去保留需要的地址;需要连接尤其是删除位置后的连接,因为与删除位置下一位置的连接之后会改变该结点next值,之后就找不到要删除的地址了;所以也需要新设指针保存地址;3:看到 x->Next 要想到x是否为空指针;4:写oj题时,应该先原创 2022-05-09 12:05:55 · 129 阅读 · 0 评论 -
复杂度OJ题
一:解法一: 每次旋转一个数字的时候,数字里的每一个数就要往后移动一次;那么对于k个数而言那么就要移动K*N总次数;所以时间复杂度为O(N);显然不符合题意;解法二 :这个方法尝试了双指针求法,这也是在数组里较为常见的解法;对于这些多过程步骤,一定要注意画出多过程图解过程,标记好数组的下标临界点;消失的数字: 对于异或操作符来说: a^a = 0; a^0 = a;当时在做这道题是,因为只知道套公式,而没有去往异或的底层原理去思考;原创 2022-05-10 16:18:06 · 105 阅读 · 0 评论