- 博客(20)
- 收藏
- 关注
原创 二叉树的深度和高度
给定一个二叉树, 找出其最大深度。二叉树的深度为根节点到最远叶子节点最长路径上的节点数。如二叉树 [ 3, 9, 20, null, null, 15, 7 ]的最大深度为3:先看一个简单的情况:对于节点 3, 最大深度自然是左右子节点 + 1, 左右子节点都有可能为空, 但只要有一个, 树的最大高度就是 1 + 1 = 2。然后再增加几个节点:而对于节点 3, 则是左右子树深度最大的那个然后 + 1, 具体谁更大, 并不关心。
2023-09-07 09:37:26
6387
原创 二叉树的经典算法题
LeetCode100:给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。输入:p = [1,2,3], q = [1,2,3]输出:true输入:p = [1,2], q = [1,null,2]输出:false两个二叉树同时进行前序遍历, 先判断根节点是否相同, 如果相同再分别判断左右子节点是否相同, 判断的过程中只要有一个不相同就返回 false, 如果全部相同才返回 true。
2023-09-06 10:42:31
207
1
原创 数据结构——树
int val;这里本质上就是两个引用, 分别指向了两个位置, 为了方便理解, 分别命名为左孩子和有孩子。int val;除了使用链表, 也可以使用数组来存储二叉树:使用数组存储的最大不足是可能存在大量的空间浪费。
2023-08-30 09:46:26
289
1
原创 队栈和Hash的经典算法题
仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作 (push、pop、peek、empty)void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true;否则,返回 false将一个栈当作输入栈, 用于压入 push 传入的数据;另一个栈当作输出栈, 用与 peek 和 pop 操作。
2023-08-24 11:36:27
36
1
原创 队列的基本概念
队列的特点是节点的排队次序和出队次序按入队时间先后确定, 即先入队者先出队, 后入队者后出队, 即我们常说的FIFO (first in first out)先进先出。
2023-08-24 09:09:04
69
1
原创 栈—计算器问题解析
使用栈, 遍历字符串, 并用变量preSign记录每个数字之前的运算符, 对于第一个数字, 其之前的运算符视为 + 号。给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval()。遍历完字符串s后, 将栈中元素累加, 即为该字符串表达式的值。输入:s = “3+2*2”
2023-08-21 22:53:27
45
1
原创 栈的经典算法问题
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。示例1:输入:s = “()[]{}”输出:true遍历字符串, 遇到左括号就入栈, 遇到右括号就与栈顶符号比较, 不匹配就返回false。
2023-08-16 09:22:28
33
1
原创 基于数组(或者链表)实现栈
栈是比较特殊的线性表, 又称之为访问受限的线性表。栈是很多表达式、符号等运算的基础, 也是递归的底层实现。栈底层实现仍然是链表或者顺序表, 栈与线性表的最大区别在于 数据的存储被限制了, 其插入和删除操作只允许在线性表的一端进行。一般而言, 把允许操作的一端称为栈顶 (Top), 不可操作的一端称为栈底(Bottom), 同时把插入的操作称为入栈 (Push), 删除元素的操作称为出栈 (Pop)。若栈中没有任何元素, 则称为空栈。
2023-08-15 21:52:23
50
原创 算法通关村——双指针的妙用
给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。要求:不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。例子1:输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]例子2:输入:nums = [0,1,2,2,3,0,4,2], val = 2输出:5, nums = [0,1,4,0,3]
2023-08-15 16:52:33
25
原创 链表反转之K个一组反转
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。示例1:输入:head = [1,2,3,4,5], k = 2输出:[2,1,4,3,5]示例2:输入:head = [1,2,3,4,5], k = 3输出:[3,2,1,4,5]
2023-08-03 15:32:10
638
原创 链表反转的拓展问题
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right。请你反转从位置 left 到位置 right 的链表节点,返回反转后的链表。示例 1:输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5]
2023-08-01 11:39:48
34
1
原创 编程导航算法通关村第一关 | 链表中环的问题与双向链表
遍历链表的时候将元素放入到map中, 如果有环一定会发生碰撞, 发生碰撞的位置也就是环的入口。
2023-07-31 10:08:22
95
1
原创 动态代理的个人理解
@动态代理学习的一些心得总结Proxy.newProxyInstance(coll.getClass().getClassLoader(), coll.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, ...
2020-03-31 21:38:45
220
原创 # File类学习中遇到的问题
如何删除File类对象调用mkdirs( )方法创建出的多级目录**## 代码:public class Test { public static void main(String[] args) throws IOException { File file = new File("目录A/目录B/目录C"); file.delete(...
2020-03-21 17:25:20
236
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人