- 博客(12)
- 收藏
- 关注
原创 二叉树篇|理论基础|递归/非递归/层次遍历|翻转二叉树|对称二叉树|最大深度|二叉树的直径|路径总和|构造二叉树|最近公共祖先|总结
涉及到二叉树的构造,无论普通二叉树还是二叉搜索树一定先序,都是先构造根节点,从上往下构造求普通二叉树的属性(求深度/路径和/是否对称等),一般是后序,因为需要收集左右孩子的信息向上一层返回,通过递归函数的返回值做计算求二叉搜索树的属性,一定是中序了,要不白瞎了有序性了。因为二叉搜索树按照中序遍历的输出结果就是一个有序序列。
2025-04-06 12:25:18
804
原创 栈、队列、堆|用栈实现队列|用队列实现栈|有效的括号|滑动窗口最大值|前 K 个高频元素|数组中的第k个最大元素|总结
滑动窗口最大值问题:使用到了单调队列主要思想是队列没有必要维护窗口里的所有元素,只需要维护有可能成为窗口里最大值的元素就可以了,同时保证队列里的元素数值是由大到小的。那么这个维护元素单调递减的队列就叫做单调队列,即单调递减或单调递增的队列。java中没有直接支持单调队列,需要我们自己来一个单调队列求前 K 个高频元素:使用到了优先级队列其实就是一个披着队列外衣的堆,因为优先级队列对外接口只是从队头取元素,从队尾添加元素,再无其他取元素的方式,看起来就是一个队列。堆。
2025-04-01 10:42:15
995
原创 字符串|反转字符串|反转字符串II |替换数字 |翻转字符串里的单词|右旋转字符串|实现 strStr()|字符串总结|双指针回顾
在344.反转字符串 (opens new window),我们使用双指针法实现了反转字符串的操作,双指针法在数组,链表和字符串中很常用。接着在字符串:替换空格 (opens new window),同样还是使用双指针法在时间复杂度O(n)的情况下完成替换空格。其实很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。在541. 反转字符串II (opens new window)
2025-03-18 15:55:49
677
原创 哈希表part02 |454.四数相加II |383. 赎金信|15. 三数之和|8. 四数之和|总结
一般来说哈希表都是用来快速判断一个元素是否出现集合里数组作为哈希表set作为哈希表map作为哈希表经典题目回顾两数之和,三数之和,四数之和这三题都是在一个数组里找到和为target的元素的组合,用哈希法解决了两数之和,用哈希法也可以解决三数之和,四数之和,但是非常麻烦,需要去重导致代码效率很低,所以四数之和,三数之和都推荐使用双指针法而题目四数相加是四个独立的数组,只要找到使得A[i] + B[j] + C[k] + D[l] = 0 的组合的个数就可以,不用考虑重复问题,用哈希法就可以解决。
2025-02-26 17:24:00
669
原创 哈希表part01|哈希表理论基础|242.有效的字母异位词|349. 两个数组的交集|202. 快乐数|1. 两数之和
快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。示例 1: 输入: s = "anagram", t = "nagaram" 输出: true。示例 2: 输入: s = "rat", t = "car" 输出: false。题意:给定两个数组,编写一个函数来计算它们的交集。
2024-12-23 12:10:07
803
原创 链表part2|24. 两两交换链表中的节点|19.删除链表的倒数第N个节点|面试题02.07. 链表相交|142.环形链表II |总结
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null。一般涉及到增删改操作,用虚拟头结点都会方便很多, 如果只是查的话,用不用虚拟头结点都差不多。题意: 给定一个链表,返回链表开始入环的第一个节点。给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。:不允许修改给定的链表。同:160.链表相交。
2024-12-20 19:57:41
696
原创 代码随想录day3|链表理论基础|203.移除链表元素|707.设计链表|206.反转链表
链表的定义:链表的增添和删除都是O(1)操作,查找的时间复杂度是O(n)。链表的长度可以是不固定的,并且可以动态增删, 适合数据量不固定,频繁增删,较少查询的场景。力扣题目链接(opens new window)题意:删除链表中等于给定值 val 的所有节点。示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]示例 2: 输入:head = [], val = 1 输出:[]示例 3: 输入:head = [7,7,7,7], val = 7
2024-12-19 17:17:16
572
原创 TransmittableThreadLocal 是什么?它比ThreadLocal好在哪里?
TransmittableThreadLocal 是由阿里巴巴开源的一个 Java 类库,它提供了一种机制,使得在使用线程池等多线程环境下,能够将 ThreadLocal 变量的值从一个线程传递到另一个线程。总的来说,TransmittableThreadLocal 是对 Java 标准库中 ThreadLocal 的一个增强,它解决了在多线程环境下,尤其是线程池环境下,线程局部变量的传递问题,使得开发者可以更加方便地在复杂的多线程场景下管理线程间的上下文信息。
2024-10-21 21:40:32
541
原创 WSL与虚拟机的区别
VMware 虚拟机:Ubuntu 是 Linux 系统的一种发行版。Ubuntu 在虚拟机中作为一个完整的操作系统运行,独立于 Windows。它有自己的内核、系统资源和环境。WSL:WSL (Windows Subsystem for Linux)是一个兼容层,允许你在 Windows 上运行 Linux 二进制文件。WSL 2 使用轻量级的虚拟化技术,但它与 Windows 共享内核和资源。
2024-10-16 18:45:31
2985
原创 代码随想录day2|977.有序数组的平方|209.长度最小的子数组|59.螺旋矩阵II
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。:每个元素进入滑动窗口操作一次,出去操作一次,每个元素都是被操作两次,所以时间复杂度是 2 × n 也就是O(n)因为将 nums[start] 从 sum 中减去后,仍然可能满足 sum≥s,故该操作可能不止一次,并且将其元素平方之后,存储子数组(滑动窗口)中的元素和。
2024-06-22 17:10:08
1006
原创 代码随想录day1 |数组理论基础|704. 二分查找|27. 移除元素
力扣题目链接(opens new window)给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。关键点:想清楚对区间的定义,区间的定义就是不变量。在二分查找的过程中,保持不变量,就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作左闭右开[left, right)27. 移除元素力扣题目链接(opens new window)给你一个数组 nums
2024-06-21 17:59:15
503
原创 分页插件报类型转换异常: class java.util.ArrayList cannot be cast to class com.github.pagehelper.Page(最新解决方法)
在springboot和mybatis中使用分页插件时报错:java.lang.ClassCastException: class java.util.ArrayList cannot be cast to class com.github.pagehelper.Page (java.util.ArrayList is in module java.base of loader 'bootstrap';实际上只是引入的pagehelper版本低了,和项目中使用的其他库的版本不兼容。
2024-06-19 11:01:01
3721
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人