
算法编程题
文章平均质量分 74
Rick_2021
我很懒,还不想添加简介。
展开
-
Day17 | leetcode110. 平衡二叉树、leetcode257. 二叉树的所有路径、leetcode404. 左叶子之和
平时我们解二叉树的题目时,已经习惯了通过节点的左右孩子判断本节点的属性,而本题我们要通过节点的父节点判断本节点的属性。左叶子的明确定义:节点A的左孩子不为空,且左孩子的左右孩子都为空(说明是叶子节点),那么A节点的左孩子为左叶子节点。那是因为代码的逻辑其实是求的根节点的高度,而根节点的高度就是这棵树的最大深度,所以才可以使用后序遍历。这道题目要求从根节点到叶子的路径,所以需要前序遍历,这样才方便让父节点指向孩子节点,找到对应的路径。二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数。原创 2023-07-09 19:40:11 · 260 阅读 · 0 评论 -
Day16 | leetcode104. 二叉树的最大深度、leetcode559. n叉树的最大深度、leetcode111. 二叉树的最小深度、leetcode222. 完全二叉树的节点个数
二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数或者节点数(取决于高度从0开始还是从1开始)二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)而根节点的高度就是二叉树的最大深度,所以本题中我们通过后序求的根节点高度来求的二叉树最大深度。用后序遍历(左右中)来计算树的高度。原创 2023-07-06 10:42:07 · 199 阅读 · 0 评论 -
Day15 | 层序遍历、leetcode226. 翻转二叉树、leetcode101. 对称二叉树
【代码】Day15 | 层序遍历、leetcode226. 翻转二叉树、leetcode101. 对称二叉树。原创 2023-07-03 22:46:15 · 239 阅读 · 0 评论 -
Day14 | 二叉树理论基础、递归遍历(leetcode144. 二叉树的前序遍历;leetcode94. 二叉树的中序遍历;leetcode145. 二叉树的后序遍历)、迭代遍历
在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。这里前中后,其实指的就是中间节点的遍历顺序,只要大家记住 前中后序指的就是中间节点的位置就可以了。看如下中间节点的顺序,就可以发现,中间节点的顺序就是所谓的遍历方式。若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;原创 2023-07-03 16:59:51 · 282 阅读 · 0 评论 -
Day09 | leetcode28. 实现 strStr()、leetcode459. 重复的子字符串、字符串总结、双指针回顾
leetcode459. 重复的子字符串 字符串总结 https://programmercarl.com/%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%80%BB%E7%BB%93.htmlhttps://programmercarl.com/%E5%8F%8C%E6%8C%87%E9%92%88%E6%80%BB%E7%BB%93.html原创 2023-07-02 14:57:08 · 159 阅读 · 0 评论 -
Day07 | leetcode454. 四数相加II 、leetcode383. 赎金信 、leetcode15. 三数之和 、leetcode18. 四数之和、哈希表专题总结
哈希表数据结构和python的对应:记住:ord()not。原创 2023-06-30 11:20:53 · 80 阅读 · 0 评论 -
Day05 | 哈希表理论基础、leetcode242. 有效的字母异位词、leetcode349. 两个数组的交集、leetcode202. 快乐数、leetcode1. 两数之和
哈希函数(Hash function):把学生的姓名直接映射为哈希表上的索引,然后就可以通过查询索引下标快速知道这位同学是否在这所学校里了。这题用python来写也方便好多,我把两个方法写在一块了,其中法二原本只用两行代码就能解决,这里展开来了,方便我在本地IDE上debug。刷题和笔试下来,感觉还是用python写更方便,重点会更多的放在对算法的理解上面,于是之后都先用python写算法题了。法一利用了python的Counter包,使得这题更加方便解决。法二则是python的常规解法,重在逻辑。原创 2023-06-30 00:07:58 · 78 阅读 · 0 评论 -
Day04 | leetcode24. 两两交换链表中的节点、leetcode19. 删除链表的倒数第N个节点、leetcode160. 链表相交、leetcode142. 环形链表II、链表专题总结
这题和反转链表有相似之处,同样可以用循环模拟做出,也能用递归法。 注意点: 这题的递归法主要参考了力扣上的画解算法,并结合自己在本地IDE上逐步debug才能较好的理解递归(桟或树)。递归写法要观察本级递归的解决过程,形成抽象模型,因为递归本质就是不断重复相同的事情。而不是去思考完整的调用栈,一级又一级,无从下手。如图所示,我们应该关注一级调用小单元的情况,也就是单个 f(x)。其中我们应该关心的主要有三点: 返回值 调用单元f(x)做了什么 终止条件在本题中: 返回值:交换完成的子链表(从后往前); 调原创 2023-06-26 21:58:41 · 237 阅读 · 0 评论 -
Day03 | 链表理论基础、leetcode203. 移除链表元素、leetcode707. 设计链表、leetcode206. 反转链表
手写链表// 单链表 public class ListNode {// 节点的值 int val;// 下一个节点 ListNode next;// 节点的构造函数(无参) public ListNode() {} // 节点的构造函数(有一个参数) public ListNode(int val) {} // 节点的构造函数(有两个参数) public ListNode(int val , ListNode next) {} }原创 2023-05-21 22:21:06 · 396 阅读 · 0 评论 -
Day02 | leetcode977. 有序数组的平方、leetcode209. 长度最小的子数组、leetcode59. 螺旋矩阵II、数组专题总结
二分法;(循环不变量原则:只有在循环中坚持对区间的定义,才能清楚的把握循环中的各种细节)双指针法;(快慢指针法:通过一个快指针和慢指针在一个for循环下完成两个for循环的工作;相向双指针)滑动窗口法;(重点是理解滑动窗口如何移动窗口起始位置,并达到动态更新窗口大小的条件)模拟法;(真正解决题目的代码都是简洁的,或者有原则性的)为了更好地写代码和保留自己的做题轨迹,我再本地IDE上专门建立了一个代码随想录的代码文件夹,里边会存放着未来2个月的刷题代码和注释,如下图所示。原创 2023-05-14 23:18:16 · 261 阅读 · 0 评论 -
Day01 | 数组理论基础、leetcode704. 二分查找、leetcode27. 移除元素
这题也是二刷,虽然在不看提示的情况下最后也写出来提交AC了,但是前几次提交都通过不了,主要是没看清题目的具体意思。还有这里建议用本地IDE来做算法题(建了个随想录的文件夹,不同数据结构的题目分别放好来),一是方便debug,二是效率高(写代码有提示、运行程序比浏览器快、方便写输入测试样例等),下面除了有我力扣上的代码,也有在IDE上的代码展示。在面试笔试的时候也是这样,很多题虽做过但实现起来不顺利,没做过的能想出思路但实现不了,应该还是写代码写少了,继续加油。拓展题目(二刷再做,现在没时间)原创 2023-05-11 11:38:50 · 231 阅读 · 0 评论