自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 迭代实现二叉树的遍历

前序遍历是中左右, 如果还有左子树就一直向下找, 之后再从最底层逐步向上向右找。

2023-09-06 09:27:21 153 1

原创 二叉树的层次遍历

从根节点开始, 先访问根节点下面一层全部元素, 再访问之后的层次。

2023-08-30 14:35:06 899 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

原创 算法通关村——不简单的数组增删改查

具有相同特征数据元素的一个有限序列, 其中所包含元素的个数称为线性表的长度。

2023-08-07 11:38:43 34

原创 链表反转之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

原创 基础的链表反转问题

给你单链表的头节点 head,请你反转链表,并返回反转后的链表。

2023-07-31 15:35:06 29 1

原创 编程导航算法通关村第一关 | 链表中环的问题与双向链表

遍历链表的时候将元素放入到map中, 如果有环一定会发生碰撞, 发生碰撞的位置也就是环的入口。

2023-07-31 10:08:22 95 1

原创 编程导航算法通关村第一关 | 链表高频算法题

算法学习

2023-07-27 16:17:47 112 1

原创 编程导航算法通关村第一关 | 初识链表

将尾节点的前一个节点指向 null 即可。

2023-07-24 16:37:27 141

原创 动态代理的个人理解

@动态代理学习的一些心得总结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关注的人

提示
确定要删除当前文章?
取消 删除