自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 问答 (1)
  • 收藏
  • 关注

原创 算法题目:删除链表的倒数第 N 个结点

19. 删除链表的倒数第 N 个结点难度中等1504收藏分享切换为英文接收动态反馈给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]提示:链表中结点的数目为sz 1 <=...

2021-08-13 17:01:33 100

原创 BigDecimal通过构造方法转化double时产生的问题

问题:系统中部分数值使用double储存,但是在计算的时候使用的是BigDecimal。代码中通过构造函数将double转化为BigDecimal,但是转化产生了更多的小数。查看了构造方法发现翻译版注释中建议转化为Double.toString(double),然后在使用构造方法。或者直接使用静态方法BigDecimal.valueof(double)方法来获得。使用的idea翻译插件...

2021-08-13 10:29:46 167

原创 算法题目:二叉树中第二小的节点

思路:使用深度优先遍历,比较每个节点的大小,最后得出结论。但是该题目可以减枝,由于题目的特性root.val = min(root.left.val, root.right.val),所以得出根节点是最小的节点,并且父节点第二小的节点的父节点一定等于根节点的值。通过以上两种特性来进行遍历和减枝操作。观察树结合该题目的条件,我们不难发现,图中的③④节点无论如何往下衍生,都只会是这两个节点最小,所以每次只需要比较父节点的值等于根节点的值的节点的值是否是第二小。代码如下:public c...

2021-07-27 20:52:19 100

原创 Docker下Jenkins、Redis、Zookeeper、kafka、nacos等安装

1.Jenkins安装

2021-07-27 19:36:38 509

原创 ThreadLocal的原理及使用-SimpDateFormat线程不安全问题

在日常工作的时候,编写了一个计算工作日的工具类,当时直接定义了static fina的一个SimpDateFormat,一开始没有感到哪里不对,后来想到这个时间的格式化类是线程不安全的。SimpDateFormat线程不安全的原因:calendar变量共享,在进行format等操作的时候,会对该对象赋值和操作,当多条线程同时访问的时候就出现了安全问题。当然要解决这个问题可以使用多种方式,可以使用java8中的LocalDateTime、LocalDate、LocalTime等时间类,或者使用Th

2021-01-14 12:50:20 277 1

原创 算法题目:二叉树的层平均值

思路:直接使用层级遍历,获取每层的总和,然后除以每层的节点数来获取层平均值,题目简单,不做详细说明了,如有问题请在下面提问。代码如下:class Solution { public List<Double> averageOfLevels(TreeNode root) { List<Double> res = new ArrayList<>(); if(root==null) { return ..

2020-09-12 12:56:49 117

原创 算法题目:组合总和 III

思路:使用回溯+减枝来获取组合,由于组合内不重复,并且为1-9的整数,解空间树的如下图所示:代码及代码说明如下:class Solution { public List<List<Integer>> combinationSum3(int k, int n) { List<List<Integer>> resList = new ArrayList<>(); //遍历解空间树 ..

2020-09-12 12:49:47 90

原创 java8 ArrayList源码分析2->迭代器实现遍历

首先迭代器要实现迭代器的接口,Iterator接口中有4个方法:1.hasNext()2.next()3.remove()4.forEachRemaining(Consumer<? super E> action)在ArrayList中,内部类Itr实现了Iterator的接口并且重写了这四个方法:在itr中重新定义了三个参数,cursor(当前index),lastRet(上一个index,初始值-1),expectedModCount(修改次数,初始化的时候等于Arr

2020-09-10 13:13:45 269

原创 算法题目:前 K 个高频元素

思路:先循环整个数组,将数组中的元素和元素出现的次数存hashmap的集合中,在循环集合,建立一个有优先队列PriorityQueue,优先队列的长度为k,当长度还未到达k的时候直接将数据放入优先队列中,优先队列长度为k时,比较优先队列顶部的元素大小,当元素大于队列顶部元素时,取出顶部元素并将当前元素放入队列中。优先队列(PriorityQueue):具体是通过完成二叉树实现,小顶堆保证每个节点的值都小于等于其两个子节点,顶部则是最小值,大顶堆则相反。本题使用的是大顶堆,需要重写比较器Compara..

2020-09-10 10:51:46 97

原创 java8 ArrayList源码分析1->add方法和remove方法

今天在做算法题目的时候,使用到了ArrayList,在获取size想到了一个问题,在使用add操作的时候,ArrayList的源码是怎么实现的,然后我下载 了jdk1.8的源码。首先,ArrayList的初始容量是10,无论是什么操作,首先会调用最低容量为10。最终的实现是使用了System.arrayopy方法。如果执行add操作 ,有两种方法可供选择:1.add(E e)方法,该方法会在ArrayList的尾部插入元素,首先会调用ensureCapacityInternal方法来检查数组的容

2020-09-06 12:53:22 437

原创 算法题目:二叉树的层次遍历

难顶,断开连接半个月,公司项目太忙都没时间学习一下。吐槽一下思路:二叉树的广度优先搜索,将每一层的数据放入一个list中,然后在将每层数据list放入总的list集合中代码如下:/** * 使用二叉树层级遍历,每次将一层数据放入集合中,再将每层的集合插入list的首位 **/class Solution { public List<List<Integer>> levelOrderBottom(TreeNode root) { List..

2020-09-06 11:27:59 165

原创 算法题目:平衡二叉树

思路:本来,我看到这道题目的第一想法的遍历二叉树,然后计算每个节点的高度。我当时的想法就很简单,前序遍历并且计算,但是仔细一想这样会产生大量的重复计算,感觉题目这样子解不太好。当时看了一下题目的评论,看到了从底向上的计算方式,的确后序遍历只需要计算一次,比前序遍历更加简洁和快速。以下是我手画的后序遍历思路图:如下是代码及说明:public class Main { public static void main(String[]args){ Solution ..

2020-08-17 11:09:03 217

原创 算法题目:无重复字符的最长子串

思路:使用滑动窗口的方法:用两个指针来确定未重复子串,计算长度。出现重复后将开始指针指向重复字符,再次获取子串并计算长度,直到整个字符串循环完成,每次唯一都要计算长度并且与原最长长度比较,循环完成即可获取最长长度。初始开始下标为-1,在最前面,结束下面为0,在第一个字符,图解如下:具体代码及代码解释如下class Solution { public int lengthOfLongestSubstring(String s) { if(s == null || ..

2020-08-15 18:45:37 215

原创 算法题目:有效的括号

思路:循环遍历整个字符串,将遍历到的括号开始符对应的结束符存储在栈中,然后遍历到结束符的时候与栈顶的元素相比较,如果正确则取出栈顶元素,直到循环完成,栈为空则为有效字符串。如果循环中有一次比较为false则该字符串不是有效字符串代码如下://使用栈来储存与括号开始字符相对应的结束字符 然后对比class Solution { public boolean isValid(String s) { //栈先进后出,用于比较括号 Stack<Chara..

2020-08-14 14:24:39 148

原创 算法题目:克隆图

思路:首先,需要一个hash表来保存已经遍历过的节点,防止节点的重复读取形成死循环。然后使用深度遍历,递归遍历所有的节点并且深拷贝后返回节点,深拷贝的话直接new一个node即可以下是代码//深拷贝 深度优先算法class Solution { //记录是否重复的hash表 public Map<String, Node> readMap = new HashMap<>(); public Node cloneGraph(Node nod...

2020-08-12 10:39:59 109

原创 算法题目:被围绕的区域

题目:思路:首先 将不需要替换的O 替换为另一个字符*,然后将需要替换的字符替换为X,再将字符*替换会O,由于行数或者列数少于两行的时候 ,字符一定是在边界上,所以直接返回不需要计算替换方法:使用深度优先算法 递归将不需要替换的字符替换为*号。class Solution { public void solve(char[][] board) { // 首先判断行和列 行和列少于2 直接return if(board==null || boar..

2020-08-11 16:52:36 318

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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