- 博客(10)
- 收藏
- 关注
原创 对称二叉树-LeetCode 101
题目 题目内容很好理解,判断一棵树是镜像对称。 思路 根据题目,我们可以将问题等价为以下问题: 对于一对左右节点: 左右节点的值是否相等? 左节点的右节点与右节点的左节点是否相等? 左节点的左节点与右节点的右节点是否相等? 如果对于所有对称位置的节点,都满足上述三个条件,那么这棵树即为对称二叉树。 了解了等价问题后,剩下只需要深度优先遍历整棵树就好了,dfs分别传入一组对称位置节点(left, right) class Solution { public boolean isS
2021-05-29 11:41:56
157
原创 if和switch效率比较
翻了翻国外网站geeksforgeeks的解释,在比较情况大于5个时,switch效率更高,5个以下效率区分不明显。 文章内容摘自以下链接: https://www.geeksforgeeks.org/switch-vs-else/ 原文: Speed:A switch statement might prove to be faster than ifs provided number of cases are good. If there are only few cases, it migh.
2021-02-17 17:16:51
2446
1
原创 BFS模板,广度优先遍历
BFS(Breadth-First Search)是常见算法之一广度优先遍历,即按层及顺序遍历。 思路分析 借助队列先进先出的特性,将当前一行的节点以此推入队列 在弹出这一行的每个节点的同时,将弹出节点的子节点推入队列(子节点属于下一行),从而实现广度优先 模板如下 public List<Integer> BFS(TreeNode root) { //定义一个数组接受每个节点的值 List<Integer> res = new ArrayList<&
2020-12-06 17:18:36
218
原创 Go语言基础-range关键字
range是Go语言常用的关键字,主要用于配合for关键字对数组,切片和映射等数据结构进行迭代。 下面代码简单介绍了range关键字如何在数组中实现元素的遍历。 package main import ( "fmt" ) func main() { var strs = [...]string{"a", "b", "c", "d", "e", "f"} for k, v := range strs { fmt.Println("index:", k, "value: ", v) } }
2020-11-29 13:27:27
521
原创 二叉树的前中后序遍历-递归实现Java
定义二叉树节点类 public class TreeNode { //key为二叉树的节点的值 int key; TreeNode left; TreeNode right; public TreeNode(int key) { this.key = key; left = null; right = null; } } 构建测试用二叉树 其实前,中,后序的区别在于遍历根(父)节点与其左右节点的顺序不同,前序
2020-06-18 03:54:05
314
原创 Servlet详解
JavaWeb三大组件,三大组件分别是:Servlet程序、Filter过滤器、Listener 什么是Servlet? Servlet是运行在服务器上的小型Java程序,通过HTTP接受和相应来自Web客户端的请求。 如何实现Servlet程序 *Tomcat配置此处略去。 编写一个类去实现Servlet接口 创建MyServlet类来实现Servlet接口,并重写Servlet中方法 import javax.servlet.*; import java.io.IOException; publ
2020-06-15 02:34:53
2923
3
原创 Java线程池和自定义线程池
线程池 线程池是一种线程使用模式。在线程池中维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。使用线程池不仅能够保证内核的充分利用,还能防止过分调度。WEB服务器完成网页请求这样的任务,使用线程池技术是非常合适的。 线程池基础 线程池是一种多线程的处理形式,处理过程可以将任务添加到队列,创建线程后自动启动这些任务。这里的任务是实现了Runnable或Callable接口的实例对象。 为什么使用线程池? 使用线程池可以根据需求和硬件灵活控制线程的数量,并且可
2020-06-13 07:38:38
727
原创 Lambda表达式详解
Lambda 简介 Lambda表达式,也可以成为闭包。 Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。 Lambda对接口的要求 不是所有的接口都可以使用Lambda表达式来实现。 接口中只能有一个必须被实现的方法(抽象方法)。 注解 @FunctionalInterface 用于约束接口内抽象方法的个数,要求接口中的抽象方法只有一个。这个注解一般会和lambda表达式一起使用。 加上这个注解后,如果接口内有两个抽象方法则会报错。 Lambda基础语法 语法形式为 () ->
2020-06-09 03:37:44
397
原创 JVM运行时数据区图解(总结自《深入理解Java虚拟机》)
JVM运行时数据区基本组成部分及其功能: *灰色部分为线程共享 *蓝色部分为线程私有 1. 程序计数器 程序计数器(Program Counter Register)可以看作是当前线程所执行字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值Laura选取吓一跳需要执行的字节码指令。 Java虚拟机的多线程是通过线程轮流切换、分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(单核)都只会执行一条线程中的指令。程序计数器可用于线程切换后能恢复到正确的执行位置,每条线程都需要一个
2020-06-05 03:06:03
316
2
原创 二叉树的分层遍历
二叉树的分层遍历 二叉树的分层遍历, 换行打印。 下面的代码将解释如何实现换行打印。 分层遍历使用队列queue,按层次将节点推入队列,并在弹出时将节点的左右节点推入队列。 换行打印使用for循环,定义n=队列长度,遍历该行的所有节点后,跳出for循环,打印换行,再重新赋值队列长度n,重新进入下一行的for循环。 //定义Treenode class Treenode{ int val;...
2019-06-10 10:33:00
1874
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅