自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【LeetCode】路径总和 III(前缀和)

#LeetCode每日一题【二叉树专题】路径总和 IIIhttps://leetcode-cn.com/problems/path-sum-iii/分析解法1:二叉树中任意路径等于目标和,暴力解法,从二叉树的每一个节点向下寻找符合条件的路径,记录数目;再以同样的方式计算二叉树的所有其他的节点,即双重递归实现 int ans = 0; // 暴力搜索法:每个节点都去找有没有路径满足目标和 public int pathSum(TreeNode root, int target

2022-03-18 20:13:09 941

原创 【LeetCode】递归时值传递、引用传递的注意

#LeetCode每日一题【二叉树专题】在java中基本类型都是值传递,而非基本类型都是引用传递;当其作为参数在递归过程中,需要注意分支污染问题,以及是否需要回溯的问题int作为参数传递因为int是值传递,每次递归调用方法都是传入一个值,递归调用结束之后,并不会影响原来的值,即不存在分支污染问题如:LeetCode104求根节点到叶节点数字之和 int ans = 0; public int sumNumbers(TreeNode root) { getSum(r

2022-02-28 20:09:28 1483

原创 【LeetCode】广度优先搜索之层次遍历通用解体模板

#LeetCode每日一题【二叉树专题】经常涉及到一些二叉树跟层数相关的题目,例如需要对树每一层的节点做些逻辑处理、求层数(高度)等,类似于这类题目,都可以使用广度优先搜索的层次遍历去实现,大致模板如下if (root == null) { return;}Deque<TreeNode> queue = new LinkedList<>();queue.add(root);while (!queue.isEmpty()) { // 当前队列元素全部出队

2022-02-28 19:28:14 436

原创 【LeetCode】路径总和 II(初窥递归+回溯)

#LeetCode每日一题【二叉树专题】路径总和 IIhttps://leetcode-cn.com/problems/path-sum-ii/分析寻找一颗二叉树中 所有 从根节点到叶子节点 路径总和等于给定目标和的路径考虑深度优先搜索,每当到达一个叶子节点的时候,判断当前值是不是满足目标和,满足即将其加入到最终结果集;需要注意的是,当某一个根节点及其下面都遍历完了之后,在继续往上,需要注意回溯,不然会影响下一次递归结果集实现 List<List<Integer>&gt

2022-02-18 17:57:13 205

原创 【LeetCode】平衡二叉树

#LeetCode每日一题【二叉树专题】平衡二叉树https://leetcode-cn.com/problems/balanced-binary-tree/分析平衡二叉树的定义:每个节点的左右两个子树的高度差的绝对值不超过 1,即满足平衡二叉树左右子树都是平衡二叉树,且左右子树的高度差绝对值不超过1;当求一棵树的高度时,使用dfs递归的时候,知道左右子树的高度的同时也是可以判断这棵树是否平衡,如果有一颗子树不平衡,则整棵树不平衡。实现public boolean isBalanced(

2022-02-14 17:09:35 307

原创 【LeetCode】从前序与中序遍历序列构造二叉树(不断优化)

#LeetCode每日一题【二叉树专题】从前序与中序遍历序列构造二叉树https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/分析前序:根——左——右中序:左——根——右前序的第一个元素肯定是根节点,在中序中,根节点左边的元素是左子树的所有元素,根节点右边的元素是右子树的所有元素,在前序序列中找到左子树、右子树的前序序列,在递归的处理左右子树即可实现 public

2022-02-14 14:57:06 186

原创 【LeetCode】恢复二叉搜索树

#LeetCode每日一题【二叉树专题】恢复二叉搜索树https://leetcode-cn.com/problems/recover-binary-search-tree/分析二叉搜索树一个重要的特性就是其中序遍历的结果是升序的,二叉搜索树被交换了两个节点,也就等同于升序数组中被交换了两个数。如何找到升序数组中被交换的两个数?假设一个数组 [1,2,3,4,5,6,7] 交换其中的,2、6为[1,6,3,4,5,2,7],其中第一次出现当前元素比后一个元素值大的时候定是出错的第一个位置(被交

2022-02-09 17:01:55 6459

原创 【LeetCode】相同的树+对称二叉树

#LeetCode每日一题【二叉树专题】相同的树https://leetcode-cn.com/problems/same-tree/分析判断两棵树是否相等,即根节点一样、左子树一样、右子树一样;左子树和右子树也是同样的处理方式,很明显是一个递归程序实现 // 相同的树:切分成子问题,根节点一样的情况下,比较左子树,在比较右子树,最后综合结果; // 递归不用考虑太多细节,只需考虑当前层级应该做啥::拿到左右子树的比较结果综合~~~ public boolean isSame

2022-02-08 16:19:04 6141

原创 【LeetCode】不同的二叉搜索树(递归——递归+记忆搜索优化——动态规划)

#LeetCode每日一题【二叉树专题】不同的二叉搜索树https://leetcode-cn.com/problems/unique-binary-search-trees/分析二叉搜索树,根节点的值大于左节点小于右节点,且他的每一颗子树都是二叉搜索树。所以确定根节点i之后,那左子树的值必然是是[1,i)之间,右子树的值必然是在(i,n]之间。即能切分成子问题:左子树的根节点值j在[1,i)中,其左子树的值必然是在[i,j),其右子树的值必然是在(j,i)…以此类推。即是一个递归问题,不断

2022-02-07 16:33:09 450

原创 【LeetCode】扁平化多级双向链表

#LeetCode每日一题【链表专题】扁平化多级双向链表https://leetcode-cn.com/problems/flatten-a-multilevel-doubly-linked-list/分析题目描述得比较复杂,但其实理解了之后,大致意思就是优先遍历子集链表,在往后遍历;基本拿到手就能想到使用递归,判断该节点有无child,有则递归调用自身,没有则直接向下。当递归完之后,在将结果插入之前的链表即可。实现 public Node flatten(Node head) {

2022-01-30 16:15:25 714

原创 【LeetCode】链表随机节点——进阶蓄水池算法思想

#LeetCode每日一题【链表专题】链表随机节点https://leetcode-cn.com/problems/linked-list-random-node/分析该题实现并不难,最简单的方法就是遍历获取链表的长度,然后使用map或者list存储各个节点的值,随机获得的时候根据长度生成字符串,在直接从map中获取。代码实现: public class RandomLinkListNode { int length; // map空间换时间 Map<Inte

2022-01-29 17:19:09 810

原创 【LeetCode】LRU 缓存

#LeetCode每日一题【链表专题】LRU 缓存https://leetcode-cn.com/problems/lru-cache/分析这题属于算法设计题,考察对哈希以及双向链表的掌握程度。LRU:“最近最少使用”,常用于缓存过期策略,即当缓存内存快溢出的时候,淘汰"最近最少使用"的缓存。借鉴Java中的LinkedHashMap的做法:哈希+双链表;相比于普通的hashmap,linkedhashmap中的节点Node多了一个before、after节点,用于维护双向链表连接各节点表示前

2022-01-28 10:40:02 1138

原创 【LeetCode】有序链表转换二叉搜索树

#LeetCode每日一题【链表专题】有序链表转换二叉搜索树https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree/分析这道题看到马上就有了思路:找链表中点、切分成两块链表,构造树,树的左节点指向链表左部分,树的右节点指向链表的右部分,再递归处理即可。有一点需要注意的是:将链表分成两部分时,要把中点拿出来当作树的根节点。我之前就犯了这个错,把中点既作为树根节点,有把中点放到了右链表里面,导致最后的结果

2022-01-26 16:42:31 300

原创 【链表】寻找链表中点再深化理解和运用

前言在链表相关算法中,经常会遇到寻找链表中点,根据中点分割链表之类的算法;这边记录下寻找链表中点的方法,以及各个指针最终的指向,以便下次再遇到类似的问题时可以直接秒实现 // 常规,三指针找到链表中点,pre为中点,slow为中点右边 ListNode slow = head, fast = head, prev = null; while (fast != null && fast.next != null) { prev .

2022-01-26 10:34:58 367

原创 【LeetCode】K 个一组翻转链表

#LeetCode每日一题【链表专题】K 个一组翻转链表https://leetcode-cn.com/problems/reverse-nodes-in-k-group/分析根据给定的k值,将原链表进行分组反转,剩余的不足k的保持不变我这边第一思路是求出了链表的长度,然后根据长度计算出分组数,再对每一组进行反转,最后相互拼接即可实现public ListNode reverseKGroup(ListNode head, int k) { int length = 0;

2022-01-25 10:53:22 327

原创 【链表】反转链表再深化理解和应用

前言链表的相关算法题,经常能遇到反转相关的操作:整体反转、局部反转、满足一定条件反转等,需要快速反应反转链表的实现以及各变量的含义实现 /* 快速反应:反转链表几个参数的含义 prev是反转之后的结果 next是下一个节点 head是反转前的第一个节点,也是反转之后的最后一个元素 temp指向next */ public ListNode reverseList(ListNode head) { // 反转链表 L.

2022-01-25 10:17:22 437

原创 【LeetCode】删除排序链表中的重复元素 II

#LeetCode每日一题【链表专题】删除排序链表中的重复元素 IIhttps://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/分析两种实现方式:迭代+递归迭代:双指针正常思路双指针:遇到一样的慢指针留下来作为标记,快指针向前走;遇到不一样的,处理:将慢指针的上一个的next置为fast;;所以这里关键的要找到slow的上一个,巧妙的办法就是使用一个哑节点使用第三个指针,初始时指向哑节点,然后随着slo

2022-01-24 15:30:18 172

原创 【LeetCode】合并K个升序链表

#LeetCode每日一题【链表专题】合并K个升序链表https://leetcode-cn.com/problems/merge-k-sorted-lists/分析合并两个升序列表,之前已经实现过很多遍了;现在合并K个升序链表,给你一个链表数组,合并成有序的;最容易想到的思路就是:一轮循环,记录结果两两合并实现一// 合并K个有序链表 // 循环、拆分成合并2个有序列表 public ListNode mergeKLists(ListNode[] lists) {

2022-01-22 19:59:52 422

原创 【LeetCode】反转链表 II

#LeetCode每日一题【链表专题】反转链表 IIhttps://leetcode-cn.com/problems/reverse-linked-list-ii/分析在反转链表的基础上进行的扩展,将指定位置上的链表进行反转思路:遍历的时候,记录长度,当达到left时,开始反转;大于right之后直接结束;指定区间反转成功之后,在拼接上left之前的以及right之后的即可;所以一轮遍历的时候,记录下left的上一位、left位置以及right的下一位实现public ListNode

2022-01-21 19:27:48 421

原创 【LeetCode】相交链表

#LeetCode每日一题【链表专题】相交链表https://leetcode-cn.com/problems/intersection-of-two-linked-lists/分析前面已经实现了环形链表,如何寻找入环的位置。这一道题可以看成是环形链表的衍生题,寻找链表相交的位置:构造环形,headA一轮遍历,首尾相接入环此时就是一个环形链表寻找入环位置的题:使用双指针,一快一慢相遇之后,重置慢指针到起点在重新同时出发,在相遇则为入环位置:详见:https://blog.csdn.n

2022-01-20 19:59:42 209

原创 【LeetCode】反转链表

#LeetCode每日一题【链表专题】反转链表https://leetcode-cn.com/problems/reverse-linked-list/分析给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。1——>2——>3——>4——>5变成5——>4——>3——>2——>1实现非递归:一个一个节点的处理,记录上一个节点的位置以及下一个节点的位置,将当前节点的next指向上一个节点 public ListN

2022-01-19 20:23:23 184

原创 【LeetCode】排序链表

#LeetCode每日一题【链表专题】排序链表https://leetcode-cn.com/problems/sort-list/分析链表经典排序算法,归并排序和快速排序;两者都是采用“分治”的思想,将整体不断的切分成两部分,直至最小。且时间复杂度都是O(n*logn),空间复杂度O(1)(不同于数组需要开辟新空间);不同点是:归并排序是先切分再排序合并,快速排序是先排序在切分。实现归并排序:1. 使用递归不断的将链表分成两部分,直至长度为1(归)2. 在切分结束之后,不断的

2022-01-19 19:32:18 350

原创 【LeetCode】环形链表 II

#LeetCode每日一题【链表专题】环形链表 IIhttps://leetcode-cn.com/problems/linked-list-cycle-ii/分析找到环形链表入环的位置,非环形链表返回null实现一链表经典双指针例题:快慢指针,快指针一次向前两步、慢指针一次向前一步:若有环则快慢指针必会相遇,无环则不会相遇;; 有环相遇则快指针走过的路程是慢指针的两倍,则起点到入环位置和相遇点到入环位置的路程一定相等(数学题)换算到链表即:相遇之后,将慢指针至于头节点,再快慢

2022-01-17 17:39:38 273

原创 【LeetCode】重排链表

#LeetCode每日一题【链表专题】重排链表https://leetcode-cn.com/problems/reorder-list/分析需要将一个链表按照(i,n-i)的顺序重新排列1->n-1->2->n-2->3->n-3…实现一难点在于找到i位置对应的n-i位置的节点,首先容易想到的是利用辅助空间栈或者列表,按顺序储存各节点,再一个个拿出来与原链表组合、调整位置public void reorderList(ListNode head)

2022-01-17 16:57:37 378

原创 maven不允许一个依赖同时出现两个版本

我们都知道maven通过最短路径原则、直接依赖优先原则、最先定义优先原则来确认最终版本的jar达到一个依赖不会同时出现两个版本的效果有以下一个场景pomA的父pomB,pomB中定义了a.jar、b:2.0.jara.jar里面有b.1.0.jar此时pomA引入了a.jar那pomA的项目引入的b.jar的版本是多少呢?答案是:b.2.0.jar即如果发现引入的依赖在自身没有定义的情况下,而在父pom的dependencymanagement中有声明,则会被替换...

2021-12-15 22:34:51 1607

原创 LeetCode-7:整数反转记录

整数反转LeetCode上的一道简单算法题记录两点注意点:Java里面 int加减超过最大范围(−2^31, 2^31 − 1),并不会报错。int类型,4个字节,32位,有一位符号位的存在。int超过正向的范围之后,之所以会变成负数,就是因为,正数的符号位,也就是最高位是0,当正数超过最大值时,再向前进一位,最高位由0变成了1,所以就由正数变成负数。超过负向范围,就会变成正数。示例:判断int是否越界:如判断res*10+mod的结果是否越界,if(res*10+mod&gt

2021-06-11 15:51:01 1034 1

原创 m4s格式,多线程爬B站视频

之前接触爬虫的时候,就想着试试爬一下B站的视频,经过网上搜索和查阅资料,写了多线程爬B站视频的代码。1. 分析链接在分析链接之前,应该都有感觉,B站的是视频播放是片段型的(可以看到有一个灰色的进度条在我们观看的时候也会一直向前走)示例:https://www.bilibili.com/video/BV1gs411N7op?from=search&seid=8067122269966733021打开这个视频播放界面,打开开发者工具可以看到很多以m4s结尾的请求再仔细看看,其实只有两个请求一

2020-08-17 20:52:06 1905 2

原创 一文了解BigDecimal全部

以前就有想法花一点时间学习一下Java中用于表示高精度运算的类BigDecimal了解之后,总结一下以示学习1. BigDecimal是什么先看一组例子:public static void main(String[] s) { double a = 0.1, b = 0.2; System.out.println(a + b); }输出结果:0.30000000000000004事与愿违,结果并不是我们想象的0.3;原因很简单,计算机在做运算的

2020-06-17 17:56:34 332

原创 java.security.NoSuchAlgorithmException:Cannot find any provider supporting AES/CBC/PKCS7Padding

最近在做AES-128解密的时候,遇到了这个问题java.security.NoSuchAlgorithmException:Cannot find any providersupporting AES/CBC/PKCS7Paddingprivate byte[] decrypt(byte[] ts) { try { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");

2020-06-16 16:44:31 3293

原创 Java—UDP通信,DatagramPacket和DatagramSocket

DatagramPacketDatagramPacket:UDP数据传输的数据包,接收或者发送的数据都是通过这个进行包装常用构造方法public DatagramPacket(byte buf[], int offset, int length)buf:传入一个空字节数组用来存储数据offset:偏移量,字节数组开始存储的位置length:允许存储的最大长度适用于:接受数据(特征...

2020-03-28 23:16:36 450

原创 开启-XX:+PrintGCDetails,具体日志内容分析

看一段程序package day20200314;import java.lang.ref.SoftReference;/** * @Author: xiaoshijiu * @Date: 2020/3/14 * @Description: 分析GC打印的日志具体内容 */public class GCDetailsAnalyze { public static vo...

2020-03-14 22:05:12 7460 3

原创 JVM常见命令与参数设置

jps,查看正在运行的Java进程,如jps -ljstack + “进程号”,分析该Java进程的栈空间情况jinfo + “-flag” + “参数” + “进程号”,查看该Java进程的该项参数的大小(K-V型)或者是否开启了(是否型)jinfo + “-flags” + “进程号”,查看该Java进程的所有相关系数情况jconsole,调出Java可视化监控管理...

2020-03-14 21:03:54 346

原创 双亲委派机制源码分析以及自定义类加载器

双亲委派双亲委派:如果一个类加载器收到了加载某个类的请求,则该类加载器并不会去加载该类,而是把这个请求委派给”父类加载器“,每一个层次的类加载器都是如此,因此所有的类加载请求最终都会传送到顶端的启动类加载器;只有当”父类加载器“在其搜索范围内无法找到所需的类,并将该结果反馈给子类加载器,子类加载器会尝试去自己加载。jvm中加载器层次关系:启动类加载器BootStrapClassLoade...

2020-02-29 23:49:18 390

原创 类的加载过程中的准备阶段和初始化阶段,对静态变量的处理

问题引入class MyObject { static int num1 = 100; static int num2 = 100; static MyObject myObject = new MyObject(); public MyObject() { num1 = 200; num2 = 200; } @...

2020-02-28 21:38:09 1165 4

原创 虚引用所指向的对象到底什么时候被回收?

虚引用对象到底什么时候被回收?晚上被这个问题干了一个多小时。。。问题来源代码:import java.lang.ref.PhantomReference;import java.lang.ref.Reference;import java.lang.ref.ReferenceQueue;/** * @Author: xiaoshijiu * @Date: 2020/2/27 *...

2020-02-28 00:15:37 2536 5

原创 Java中四种引用概念分析以及代码使用示例

强引用强引用一般就是我们经常见到使用的引用关系,通过new一个对象,建立一个强引用关系;如:Person person=new Person()即使内存不够报OOM,GC也不会回收强引用对象;软引用在Java中通过SoftReference建立软引用关系软引用特点就是:在内存不足的时候会回收该对象,内存足够的时候不会回收import java.lang.ref.SoftReferenc...

2020-02-27 23:28:17 222

原创 搭建文件服务器,Java+Centos7+Nginx

前言最近试着搭建一个文件服务器,因为在企业应用开发中文件往往都是单独存储在一个服务器中的,与应用服务器相分离,数据库层面引用该文件只需要保存一个文件的url即可;大致流程就是,前端请求文件服务器接口,接口逻辑处理保存该文件到服务器中,并返回可以访问该文件的url给前端;技术栈后端Java,SpringBoot2.2.2.RELEASE服务器Centos7,Nginx后端处理详情分环...

2019-12-22 19:04:17 1447 1

原创 Lock的lock()、lockInterruptibly()、tryLock()方法区别

lockInterruptibly()中断锁,线程等待锁的过程中如果被中断,则会立刻进入该线程,响应中断异常(异常抛出的话就进入上层处理异常)如果没有被中断,则跟lock()方法一样package day20191203;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantL...

2019-12-05 20:49:00 343 1

原创 Java并发编程——使用Condition的总结笔记

前提知识在讲解Condition之前有必要了解一下Lock和Synchronized,以及Synchronized同步代码块中使用的wait()、notify()、notifyAll()方法1. Lock和SynchronizedSynchronized是Java的一个关键字,也就是Java语言内置的特性,如果一个代码块或者方法被Synchronized修饰,那同一时刻只能有一个线程进入...

2019-12-04 22:22:24 225

原创 Java递归锁(可重入锁)

Java里面递归锁又叫可重入锁定义同一个线程在内层方法获取到锁之后,在进入内层方法会自动获取锁也就是说线程可以进入任何一个他已经拥有的锁所同步着的代码块代码验证lock 和 synchronized 都是递归锁2.1 synchronized 代码验证/** * @Author: xiaoshijiu * @Date: 2019/11/25 * @Descriptio...

2019-11-25 15:48:10 525

同花顺校招Java面试

同花顺2020届校招Java面试面经,压缩文件里面有同花顺的电话面、现场复试以及hr面面经。。。。。。

2019-11-25

github显示树结构插件octotree,crx文件离线安装

github显示树结构插件octotree,octotree.crx文件离线安装。 如果octotree.crx直接拖进去失败 则 1. 将crx文件变成rar 2. 打开开发者中心 3. 解压rar,直接将压缩文件拖入

2019-04-07

JavaWeb——图书管理系统

基于servlet/jsp开发的Web应用——图书管理系统,实现了用户注册登录,分页查找书籍,借书,还书以及管理员对书籍和用户的一系列管理操作 对于刚入门学习JavaWeb的同学有很大的帮助作用。

2019-03-18

Tensorflow训练的pb图片识别模型

Tensorflow官方给出的pb图片识别模型文件,方便用户使用相关语言进行调用测试

2019-01-04

车辆租赁管理信息系统

车辆租赁管理信息系统,数据库使用的是MySQL5.7,开发语言Java,工具eclipse5.8,实现了普通用户租车还车查询车辆,查询记录和管理员增删改查、查询信息功能业务!三层架构设计模式,Java图形化界面开发和多线程的应用,以及把数据库访问进行了方法封装。

2019-01-04

基于专家系统技术的智能决策支持系统分析

以专家系统在处理交通事故上的决策案例,分析基于专家系统技术的智能决策支持系统

2018-11-20

传统决策支持系统案例分析,体系结构,系统功能以及决策支持系统和MIS和管理科学的区别

以采购决策支持系统为例讲解传统决策支持系统的体系结构,系统功能以及决策支持系统和MIS以及管理科学的区别和联系

2018-11-20

Iphone6界面的计算器,Java语言

解压打开里面有计算器功能实现的Java源码,或者也可以直接运行jar包,都已经调试好了

2018-09-26

notepad++安装包

这个安装包里面插件管理器,emeet插件都已经存在,可以解压直接使用,很方便

2018-09-22

打地鼠游戏

用Java语言写的打地鼠游戏源码以及需要的图片,是学习Java多线程和Swing界面一个比较好的项目

2018-09-19

简易扑克牌游戏源码

慕课网Java入门第三季最后的大作业,简易扑克牌游戏设计,解压之后就可以获得源码

2018-09-19

eclipse中的tomcat插件

在eclipse安装之后,可以在导航栏直接开启、关闭、重启tomcat

2018-09-19

导入JSTL标签库的两个jar包

在jsp文件中常常需要使用标准标签库,使用taglib指令调用标准标签库前必须导入jstl.jar和standard.jar这两个jar包,解压下载的文件即可

2018-09-19

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

TA关注的人

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