![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
文章平均质量分 93
不要停止思考
啊呜,我每天都好饿啊
展开
-
LeetCode 刷题 -- Day 8
先序遍历树,利用 mostDeepHight 记录遍历过程中遇到的最大深度,mostDeepVal 记录遍历过程中遇到的最大深度的结点值。这样可得到最底层的结点。 而利用先序遍历,先访问当前结点的左子树,再访问右子树,再加上 叶子结点的深度大于mostDeepHight 才更新(并非大于等于)这样就保证了对同一层结点,只记录最左边的结点值,即为答案。 ② 中序序列以 x 为中心,x 左侧的元素为 x 的左子树, x 右侧的元素为 x 的右子树。原创 2024-04-26 10:24:29 · 1082 阅读 · 1 评论 -
LeetCode 刷题 -- Day 7
先是vector ans 数组存各路径的结点,然后遍历ans 数组取出各结点形成路径,这太麻烦了。所以只需判断当前节点引导的子树是不是满二叉树,是的话直接返回子树的结点,不是的话就往下遍历。 自顶向下递归,因此对于同一个节点,函数 getHight 会被重复调用,导致时间复杂度较高。 自顶向下遍历树的各结点(先序遍历),对每一结点,判断左右子树的高度差是否小于等于 1。② 如果 root1 和 root2 一个为空,一个不为空,则不对称。原创 2024-04-25 18:23:38 · 819 阅读 · 1 评论 -
LeetCode 刷题 -- Day 6
在遍历队列的过程中,利用while(q.size()–) 实现遍历每一层,将遍历的元素出队,并将下一层压入队列,最后就得到了各层结点值了。在遍历队列的过程中,利用while(q.size()–) 实现遍历每一层,将遍历的元素出队,并将下一层压入队列,最后就得到了各层结点值了。DFS 遍历树,且每下一层高度 h+1,当访问到叶子结点时,就得出了一条从根节点到最近叶子结点的路径长度了(为当前h+1),记录最小的路径长度即为答案。② root 不为空,则找它的左右孩子的高度,并返回较大的高度 h。原创 2024-04-24 21:43:55 · 1052 阅读 · 0 评论 -
LeetCode 刷题 -- Day 5
c++11 新标准引入了三个新成员------- emplace_front,emplace 和 emplace_back,这些操作构造而不是拷贝元素,因此相比push_back 等函数能更好地避免内存的拷贝与移动,使容器插入元素的性能得到进一步提升。② 对于push 操作的实现,直接push存入q,对于pop 操作,先把q 中的非队尾元素按序存入 temp,q 的队尾即为要pop的元素,把队尾元素pop后,再将temp中的元素按序存入q。定义优先级队列,自动排序,队首元素即为最大值。原创 2024-04-22 21:49:52 · 889 阅读 · 0 评论 -
LeetCode 刷题 -- Day 4
有性质:将 s 中第一个(或前k个) s‘ 移去,再 s 末尾加入一个 (或k个)s’ ,则 s 不变。s’ ,将 s 的首尾拼接(ss)后,中间会出现 s。i += 2 * k) ,i 为观察区第一个元素下标,则 ① 为 reverse(s.begin() + i, s.begin() + i + k);从1开始计数,在计数开始前或每数到 2k 时都进行判断处理一次 ①数到2k的倍数则反转前k个,②剩余字符少于k个则全部反转并结束,③ 如果剩余字符少于2k个 但大于等于 k 个则反转前k个并结束。原创 2024-04-20 11:41:20 · 733 阅读 · 0 评论 -
LeetCode 刷题 -- Day 3
因为使用 sort() 后,nums1 和nums2 中元素都从小到大排列,所以用双指针遍历时 push_back到 ans 的数也是按从小到大的顺序,即下一个要 push_back 到 ans 的数,要么比ans中所有的数都大,要么等于ans.back()。所以值不会越来越大的,那就只有 ①、② 两种情况,那这题就简单了,循环计算各个位置平方和,若得到的值出现过,则说明进入循环了,break;所以这题其实不是用哈希表法,而是用动态规划的知识,动态规划以后再来探讨吧,先学基础的。原创 2024-03-28 20:32:43 · 2276 阅读 · 0 评论 -
LeetCode 刷题 -- Day 2
想了很久,发现一种比两趟好一点的方法:用一趟是为了代码跑得快,那我定义两个指针 *fast 和 *slow,fast一次走两步,slow每次走一步,这样fast到底终点后,slow只走了一半。这样只用花一半的时间就能得到链表的长度len了,此时slow还在链表的中间,若 n < len 的话,slow 继续向前next,找到要删除的结点删除就行,这不就一趟实现了。则 当 fast 走了 a 步时,f = a,s = nb + a,两者相遇,并同时指向链表入口。解决方法:用pre指针搭桥,连接各端。原创 2024-03-24 00:21:22 · 2118 阅读 · 0 评论 -
LeetCode 刷题 -- Day 1
2、为了使用双指针不停移动来更新ans,选择了从两端往中间移动,先让 j = nums.size() - 1,若a[i] [j] > target 再分别讨论 a[i+1] [j] 和 a[i] [j-1] 这两种情况,这样则要么使用DFS,要么用二维数组或结构体(发现没有,其实可以不用数组)定义sum为连续子数组值的和,sum < target 当然是 ++j,sum > target 那 j 不动,sum - nums[i] 后 i++,是不是比 i,j 从两端开始往中间移动好一点。原创 2024-03-22 19:29:33 · 626 阅读 · 1 评论