- 博客(53)
- 收藏
- 关注
原创 【LeetCode刷题】常用小技巧
本地调试打印数组内容会比较方便,但直接打印数组的话,控制台显示的是数组对应内存地址的哈希值,所以需要把数组转成list了之后再打印才能看到数组的内容。
2024-05-13 07:22:25
231
原创 【LeetCode】热题100 刷题笔记
这道题用两层for循环也能做出来,但我们还是要挑战一下时间复杂度小于On2的解法,不能因为它是第一道 而且还是简单题就不做,题目还是常做常新的,从中挖掘新的学习点也是一个一件很有价值的事情。
2024-04-01 07:37:42
855
原创 《代码随想录 刷题顺序》
704. 二分查找27. 移除元素209. 长度最小的子数组59. 螺旋矩阵II203. 移除链表元素707. 设计链表206. 反转链表19. 删除链表的倒数第N个结点242. 有效的字母异位词349. 两个数组的交集1. 两数之和454. 四数相加II15. 三数之和18. 四数之和344. 整数拆分541. 反转字符串II151. 反转字符串中的单词28. 找出字符串中第一个匹配项的下标459. 重复的子字符串232. 用栈实现队列225. 用队列实现栈20. 有效的
2023-06-18 21:33:45
1077
原创 二叉树 | 判断是否为平衡二叉树
牛客BM 36 判断是否为平衡二叉树题目:给你二叉树的根节点root,判断这个树是否为平衡二叉树。定义:二叉树的左右子树的高度之差的绝对值不超过1;平衡二叉树的子树也是平衡二叉树。思路:递归遍历方式:后序遍历1.分别求左右子树的高度;2. 若左右子树高度差不符合定义,则返回-1;3.若左右子树高度差符合定义,则返回左右子树高度的最大值+1,作为当前结点的高度,递归向上判断;举例:1.以2为根结点的左右子树,均符合平衡二叉树的定义,则以2为根结点的二叉树为平衡二叉树;2.以3为根结点的二叉
2022-05-02 16:08:11
1184
原创 二叉树 | 二叉树的镜像(翻转)
牛客BM33 二叉树的镜像(翻转)思路:遍历(此处不能用中序遍历)二叉树的每个结点,分别翻转其左右孩子我习惯用层序遍历代码: public TreeNode Mirror (TreeNode root) {//层序遍历 if(root == null) return null; LinkedBlockingQueue<TreeNode> que = new LinkedBlockingQueue<TreeNode>();
2022-05-01 23:53:38
843
原创 二叉树 | 合并二叉树
牛客BM33 合并二叉树思路:递归同时遍历两个树,把树2合并到树1解决结点为空的问题:若某棵树的左/右孩子为空,就返回另一棵树代码: public TreeNode mergeTrees (TreeNode t1, TreeNode t2) { if(t1 == null) return t2; if(t2 == null) return t1; t1.val += t2.val;// t1.left = mergeTrees(t1.l
2022-05-01 23:51:48
323
原创 二叉树 | 输出二叉树的右视图
牛客BM41 输出二叉树的右视图题目:给出树的前序、中序序列,输出树的右视图思路:层序遍历这道题刚开始看很懵,什么右视图??看了评论区,其实右视图就是每一层的最后一个结点的集合所以,层序遍历,到了当前层的最后一个结点就记录下就行了但题目没有给完整的树,而是遍历序列,所以其实是BM40 + 层序遍历代码: public int[] solve (int[] xianxu, int[] zhongxu) {//输出右视图 TreeNode root = BuildTree(xi
2022-05-01 23:48:52
192
原创 二叉树 | 重建二叉树
牛客BM40 重建二叉树题目:根据中序、前序序列构建二叉树思想:递归在前序序列的第一个元素为root遍历中序序列,找root的位置将前序、中序序列分隔为左右子树的前序、中序序列递归构造代码: public TreeNode reConstructBinaryTree(int [] pre,int [] vin) { if(pre.length == 0 || vin.length == 0) return null; if(pre.length ==
2022-05-01 23:45:18
132
原创 二叉树 | 二叉树中和为某一值的路径(一)
牛客BM29 二叉树中和为某一值的路径(一)题目:思路:不需要记录路径/*最后一行与以下3行等价,思路是前序遍历(深度优先)* 每次递归都用sum减掉当前结点的val,直到遍历到叶子;* 如果减掉叶子结点的值后,sum还不为0,那就说明当前路径不符合要求* */代码: public boolean hasPathSum (TreeNode root, int sum) { if(root == null) return false; if(root.le
2022-05-01 23:30:51
434
原创 二叉树 | 判断是否为完全二叉树
牛客BM 35 判断是否为完全二叉树定义:完全二叉树可以看做是,满二叉树从最后一个结点开始向前删掉结点;完全二叉树去掉最后一层是一颗满二叉树,最后一层的结点在遇到最后一个结点之前,没有空结点思路:层序遍历若当前结点空则flag标记为true,继续遍历若当前结点不为空且flag为false,这将结点的左右孩子入队;若flag为true,则表明之前遇到过空结点,不符合完全二叉树的定义,返回false代码: public boolean isCompleteTree (TreeNode
2022-05-01 23:19:44
814
原创 二叉树 | 遍历的变形题
二叉树遍历的变形题树结点的定义 public static class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } }//TreeNode1. 牛客BM27 按之字形打印顺序打印二叉树思路:层序遍历:用list收集当前层的节点,res收集遍
2022-05-01 22:50:13
285
原创 二叉树 | 判断二叉树是否对称
判断二叉树是否对称1. 题目牛客BM31:给你二叉树的根节点root,判断该二叉树是否对称2. 思路递归,对比左右子树左子树的左子树 ?= 右子树的右子树左子树的右子树 ?= 右子树的左子树核心步骤:对比两棵子树伪代码令两棵子树的根节点分别为a, b(共4种情况)① 若a, b结点都为空,则两子树相等② 若a, b结点其中一个不为空,则两子树一定不相等③ 若a, b结点都不空,但结点的值不相等,则两子树一定不相等④ 若a, b结点都不为空且两结点的值相等,则向下递归判断
2022-05-01 22:05:25
498
原创 二叉树 | 层序遍历
二叉树的层序遍历题目给你二叉树的根节点root,返回二叉树的层序遍历序列。思路:迭代数据结构:队列从根节点开始,先将跟根结点入队依次弹出队列中的结点,将当前结点的左孩子和右孩子分别入队直到遍历到最后一个节点代码 public static List<List<Integer>> levelOrder(TreeNode root) {//层序遍历 List<List<Integer>> res = new LinkedLis
2022-04-30 22:07:17
276
原创 二叉树 | 中序遍历
二叉树的中序遍历题目给你二叉树的根节点root,返回改二叉树的后序遍历序列。思路:递归后序:左右根 路径收集对左子树进行前序遍历(递归调用)访问根节点对右子树进行前序遍历(递归调用)代码public class LC_94 { public List<Integer> inorderTraversal(TreeNode root) {//中序遍历:左->根->右 List<Integer> res = new ArrayList&
2022-04-30 21:52:57
128
原创 二叉树 | 后序遍历
二叉树的中序遍历题目给你二叉树的根节点 root ,返回它节点值的前序遍历。思路:递归中序:左 -> 根 -> 右对左子树进行中序遍历访问根结点对右子树进行中序遍历代码public class LC_145 { public List<Integer> postorderTraversal(TreeNode root) {//后序遍历:左->右->根 List<Integer> res = new ArrayList&l
2022-04-30 21:32:16
260
原创 二叉树 | 前序遍历
二叉树的前序遍历题目给你二叉树的根节点 root ,返回它节点值的前序 遍历。思路:递归法前序:根 -> 左 -> 右 路径收集访问根节点对左子树进行前序遍历(递归调用)对右子树进行前序遍历(递归调用)代码public class LC_144 { public List<Integer> preorderTraversal(TreeNode root) {//前序遍历:根->左->右 List<Integer> r
2022-04-30 20:45:27
297
原创 SpringBoot | 问题整理
文章目录一、Spring Framework对SpringBoot的理解Spring的优缺点二、SpringBoot对SpringBoot的理解SpringBoot的特性(优点)SpringBoot的启动过程Spring和SpringBoot的关系和区别SpringBoot的核心注解@SpringBootApplication注解@GetMapping("/{id}")@Autowired@Configurationspring 启动你使用过那些SpringBoot依赖.yml文件mybatisJDBC的过
2022-04-25 15:13:54
1125
原创 Java Web | 整理
文章目录Java Web 发展史一、Servlet是什么工作原理优缺点Servlet的生命周期MVC 模式二、JSP概念JSP运行原理JSP 容器JSP与Servlet的关系==JSP页面的执行过程==session会话什么是sessionsession对象的生存时间session 对象的生存时间TomcatJSP中使用数据库JDBCJDBC驱动程序的类型JDBC的使用如何防止SQL注入事务JavaBean组件三、Model 1: JSP + JavaBean四、Model 2:JSP + JavaBean
2022-04-25 11:11:36
349
原创 数据结构 | 面试整理
文章目录一、概述算法效率的量度二、==树==二叉树的遍历平衡二叉树红黑树B树 和 B+树B 树B+树三、图图的遍历四、排序1. 类型2. 重点排序算法快排归并堆排序(大根堆、小根堆)希尔排序3. 稳定性稳定不稳定一、概述算法效率的量度时间复杂度空间复杂度稳定性二、树二叉树的遍历4种平衡二叉树每次插入、删除都需要调整红黑树平衡二叉树的优化,不那么严格的平衡二叉树;相比起平衡二叉树:减少调整次数相比起链表:降低了查找的时间复杂度O(n) -> O(logn)B树
2022-04-24 22:48:06
554
原创 操作系统 | 面试整理
文章目录一、概述并行和并发的区别二、进程进程和线程的区别进程生命周期线程的6中状态就绪、阻塞的区别进程调度算法三、线程3种启动线程的方法Runnable和Callable的区别线程run()和start()的区别sleep()和wait()的区别notify() notifyAll()的区别守护线程是什么三-2、多线程Java如何保证多线程安全四、锁什么是死锁如何防止死锁死锁预防 ==静态==死锁避免 ==动态==synchronized如何实现互斥锁Java中的乐观锁和悲观锁的区别公平锁和非公平锁你对读
2022-04-24 22:21:07
336
原创 计算机网络 | 面试整理
文章目录一、体系结构OSI的七层模型TCP/IP 4层模型折中的5层模型二、网络层IPv4 和IPv6的区别IP 数据报的首部子网划分子网掩码CIDR私有IP地址NATARP路由算法1. 距离-向量算法 RIP(动态)2. 链路状态路由算法 OSPF(动态)路由协议三、传输层四、应用层Http1 和 Http2 的区别一、体系结构OSI的七层模型物理层、数据链路层、网络层、传输层、会话层、表示层、应用层TCP/IP 4层模型网络接口层、网际层、传输层、应用层折中的5层模型物理层、数据链路层、网
2022-04-23 10:17:58
697
原创 面经 | Java 基础 整理
文章目录Java 基础一、整体观/理论/概念JDK和JRE的区别Java 为什么可以一次编写、到处运行?java运行快吗 是编译还是解释型语言什么是APIimport java 和javax的区别重写和重载的区别面向对象和面向过程的区别面向对象的三大特性: 封装 继承 多态向上/向下转型都有常量了为什么还要有枚举?构造器 Constructor 是否可被 override构造方法是什么一个类没有声明构造方法,该程序能正确执行吗构造方法的特性调用子类构造方法之前,会先调用父类无参构造方法,其目的是?在Java
2022-04-22 15:47:27
1575
原创 Vue | 笔记
1. 创建Vue项目命令行总结查看Vue版本:vue -V(是大写的V)创建项目:vue create project_name(不能有大写字符)检查是否创建成功:cd 到刚才创建的项目的目录下npm run serve(有的环境是npm run dev)成功的话会跳出一个8080的url,复制了之后在浏览器打开,能看到Vue的页面即表示创建成功2. 安装所需要的依赖一定要cd到项目所在的目录下使用以下命令(依赖的安装是局部的,不是全局的,所以每创建一个项目就需要安装一次)el
2022-04-22 15:44:49
51
原创 SpringBoot 之报错篇
Bug 1报错:Consider defining a bean of type ‘com.example.demo.service.UserService’ in your configuration.原因:(每个人的原因都不一样)注解 @Service 应该加在 UserServiceImpl 上而不是 UserService 上(这个bug也就改了大半天吧)Bug 2报错:When allowCredentials is true, allowedOrigins cannot conta
2022-04-22 15:43:40
1187
原创 正则表达式 |笔记
一、必会题1、字符串分割18、分积木核心运算,异或二、参考题1、剑指offer 62 题: 圆圈中最后剩下的数字想实现循环链表的功能,但是太复杂了(对现在的我来说),所以用while手动模拟实现了循环链表。2、无最长重复字符的子串——滑窗有固定窗口和不固定窗口符合:end++——拓展窗口不符:start++——更换窗口起点3、LeetCode14:最长公共前缀判断第i为单词是否相等:将每个单词的第i个字符加入set,看最后set的大小,为1则相同,不为1则不同。4、LeetCode
2022-04-22 15:42:05
181
原创 判断某数是否为质数
判断某数是否为质数新思路:借助boolean数组0和1不是质数如果x是质数,那么x的n倍肯定不是质数,即2x, 3x, 4*x…不是质数boolean数组默认true,从i=2开始,对i的倍数从i倍开始,置为falsepublic static boolean isPrimer(int n) { boolean[] countPrime = new boolean[n+1]; Arrays.fill(countPrime, true);//1. 先默认都是质数 countPrime[0]
2022-04-22 15:34:33
141
原创 刷题 | 动态规划
动态规划思路:(借鉴自《代码随想录》)dp数组的含义(一维or二维)递推公式初始化遍历顺序手动模拟一、基础题牛客BM62 斐波那契数列 public int Fibonacci(int n) { if(n == 0 || n == 1) return 1; if(n < 0 || n > 40) return -1; int[] dp = new int[n+1]; dp[1] = 1; dp[2] = 1
2022-04-22 15:08:27
721
原创 刷题 | 回溯篇
文章目录排列牛客BM55:没有重复项的全排列排列牛客BM55:没有重复项的全排列递归参数终止条件单层循环1)当前操作2)回溯3)终止条件返回后,恢复现场注意:res在收集path时,要重新new一个ArrayList,否则path变化的时候,res里的数据也会变化 static ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); sta
2022-04-22 13:49:09
56
原创 Java | 队列 add() 和 offer() 方法的区别
同:二者都是向队列中添加元素异:1. add()API:Inserts the specified element into this queue if it is possible to do soimmediately without violating capacity restrictions, returning true upon success and throwing an IllegalStateException if no space is currently avail
2022-04-20 15:44:07
1188
原创 Java | 数组间转换之lambda表达式
int[] 转 listList<Integer> temp = Arrays.stream(int_arr).boxed().collect(Collectors.toList());list 转 intint[] arr = list.stream().mapToInt(Integer::valueOf).toArray();List 添加 int[] 中的所有元素// 1. 将int[] 转成listList<Integer> temp = Arra.
2022-04-14 12:49:42
781
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人