自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 收藏
  • 关注

原创 Swagger中展示的请求参数错误问题

基本介绍问题描述:在Swagger中展示的请求参数不是真正controller中的方法参数,而是工程中另外一个类的。问题定位:原来是因为多个类使用了Swagger中的@ApiModel注解,并且在该注解中的value属性值一样,导致Swagger加载了另一个类作为请求参数。解决方法:只需要把不同的类中的@ApiModel中的value属性值设置成不一样即可。...

2021-07-13 19:00:35 2361

原创 zxing绘制条形码总结

基本使用首先工程中导入zxing的依赖,如下:<dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.3</version></dependency><!-- https://mvnrepository.com/artifact/com.google.

2021-07-08 19:17:22 1501 1

原创 AQS源码

案例:一共A,B,C三个线程去银行办理业务,但是银行的窗口只有一个,即如果银行窗口有人在办理业务,其他的线程必须在候客区等待。代码演示如下:这里假设线程A先获取窗口,并在窗口办理业务的时间比较长package com.atguigu.juc.aqs;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.ReentrantLock;/** * @auther zzyy * @create 2021-03-2

2021-07-04 23:27:53 279 1

转载 第六章:Java内存模型之JMM

计算机硬件存储体系计算机存储结构,从本地磁盘到主存到CPU缓存,也就是从硬盘到内存,到CPU。一般对应的程序的操作就是从数据库查数据到内存然后到CPU进行计算。因为有这么多级的缓存(cpu和物理主内存的速度不一致的),CPU的运行并不是直接操作内存而是先把内存里边的数据读到缓存,而内存的读和写操作的时候就会造成不一致的问题。Java虚拟机规范中试图定义一种Java内存模型(java Memory Model)简称JMM) 来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都

2021-06-19 22:37:18 180

原创 第五章:线程中断机制

什么是中断?首先一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。所以,Thread.stop, Thread.suspend,Thread.resume 都已经被废弃了。其次在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。因此,Java提供了一种用于停止线程的机制——中断。中断只是一种协作机制,Java没有给中断增加任何语法,中断的过程完全需要程序员自己实现。若要中断一个线程,你需要手动调用该线程的interrupt方法,该方法也仅仅是将线

2021-06-19 14:56:19 382

原创 MongoDB关联查询不生效的问题

问题描述使用MongoTemplate做关联查询,主表的_id跟从表的payment_id相等关联,代码如下图所示:Aggregation aggt = Aggregation.newAggregation( Aggregation.lookup("t_ordr_taxes_detail", "_id", "payment_id", "taxesDetailList"), Aggregation.match(criteria),

2021-06-16 16:30:25 1083

原创 寻找重复的子树

题目介绍力扣652题:https://leetcode-cn.com/problems/find-duplicate-subtrees/给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。两棵树重复是指它们具有相同的结构以及相同的结点值。分析函数签名如下:List findDuplicateSubtrees(TreeNode root);我来简单解释下题目,输入是一棵二叉树的根节点root,返回的是一个列表,里面装着若干个二叉树节点,这些节点对

2021-06-14 23:16:16 1811 2

原创 从中序与后序遍历序列构造二叉树

题目介绍力扣106题:https://leetcode-cn.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:分析函数签名如下:TreeNode buildTree(

2021-06-14 22:57:20 238

原创 Java8新特性

一、Lambda表达式简介Lambda是一个匿名函数,我们可以把Lambda表达式理解成是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁,更灵活的代码,作为一种更紧凑的代码发风格,使得Java的语言表达能力得到了提升。语法Lambda表达式在Java8语言中引入的一种新的语法元素和操作符,这个操作符为"->",该操作符被称为Lambda操作符或者箭头操作符,它将Lambda分为两个部分:左侧:指定了Lambda表达式需要的参数列表右侧:指定了Lambda体,是抽象方

2021-06-14 01:54:03 377 1

原创 从前序与中序遍历序列构造二叉树

题目介绍力扣105题:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:分析函数签名如下:TreeNode buildTree(int

2021-06-12 19:43:07 1052

原创 最大二叉树

题目介绍力扣654题:https://leetcode-cn.com/problems/maximum-binary-tree/给定一个不含重复元素的整数数组 nums 。一个以此数组直接递归构建的 最大二叉树 定义如下:二叉树的根是数组 nums 中的最大元素。左子树是通过数组中 最大值左边部分 递归构造出的最大二叉树。右子树是通过数组中 最大值右边部分 递归构造出的最大二叉树。返回有给定数组 nums 构建的 最大二叉树 。分析函数签名如下:TreeNode constru

2021-06-12 00:34:13 1730

原创 二叉树展开为链表

题目介绍力扣114题:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/分析函数签名如下:void flatten(TreeNode root);我们尝试给出这个函数的定义:给flatten函数输入一个节点root,那么以root为根的二叉树就会被拉平为一条链表。我们再梳理一下,如何按题目要求把一棵树拉平成一条链表?很简单,以下流程:1、将root的左子树和右子树拉平。2、将root的右子树接到左

2021-06-10 23:26:54 102 1

原创 填充每个节点的下一个右侧节点指针

题目介绍力扣116题:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:分析题目的意思就是把二叉树的每一层节点都用next指针连接起来:而且题目说了,输入是一棵「完美二叉树」,形象地说整棵二叉树是一个正三角形,除了最右侧的节点next指针会指向null,其他节点的右侧一定有相邻的节点。这道题怎么做

2021-06-10 23:23:05 63

转载 滑动窗口刷题技巧总结

代码框架说起滑动窗口算法,很多读者都会头疼。这个算法技巧的思路非常简单,就是维护一个窗口,不断滑动,然后更新答案么。LeetCode 上有起码 10 道运用滑动窗口算法的题目,难度都是中等和困难。该算法的大致逻辑如下:int left = 0, right = 0;while (right < s.size()) { // 增大窗口 window.add(s[right]); right++; while (window needs shrink) {

2021-06-05 17:28:56 219

原创 二叉树的最小深度

题目介绍力扣111题:https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。BFS代码框架// 计算从起点 start 到终点 target 的最近距离int BFS(Node start, Node target) { Queue<Node> q; // 核心数据结构 Se

2021-06-03 22:00:59 121

原创 汉明距离

题目介绍力扣461题:https://leetcode-cn.com/problems/hamming-distance/两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。分析汉明距离(Hanming Distance)是用于统计两段信息之间差异的概念,有很多用途:在信息论中用来量化字符串的差异,在信息编码中用于错误检测。对于两个字符串而言,汉明距离就是对应位置的不同字符的个数;对两个整数而言,汉明距离是对应位置上数字不同的位数

2021-05-25 22:18:23 1244

原创 2的幂

题目介绍利空i231题:https://leetcode-cn.com/problems/power-of-two/给定一个整数,编写一个函数来判断它是否是 2 的幂次方。分析本题是一个数学问题。在计算机系统中,2的整次幂往往有非常重要的意义,往往是众多数据类型能够表示的数值边界,是真正的“整数”。2的整次幂,有很多重要的性质:能被2连续整除写成2进制的形式,就是一个1后面跟着n个0(n≥0)我们可以利用这些特性,构造出不同的解法。方法一:除2判断余数最简单的想法,就是借鉴十进制转换

2021-05-25 22:11:16 935

原创 课程表

题目介绍力扣207题:https://leetcode-cn.com/problems/course-schedule/你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1

2021-05-24 21:48:11 194

原创 二叉树的序列化与反序列化

题目介绍力扣297题:https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始

2021-05-24 20:53:46 232

原创 电话号码的字母组合

题目介绍力扣17题:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。分析给定数字之后,我们需要遍历每个数字对应字母的所有可能,然后进行组合。题目要求我们返回所有可能的字母组合,所以需要穷举所有解。于是自然想到,我们可以用回溯算法来解决。依

2021-05-23 16:33:26 102

原创 八皇后问题

基本介绍在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上。问有多少种摆法。八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种计算机语言可以解决此问题。问题分析设八个皇后为xi,分别在第i行( I = 1,2,3,4……,8)。问题的解状态:可

2021-05-23 16:27:24 10000 1

原创 全排列

题目介绍力扣46题:https://leetcode-cn.com/problems/permutations/给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。分析很明显,n个不同的数的全排列,应该有n!种情形。这个问题需要暴力穷举。从前到后依次遍历每一个“位置”,每次填入一个数;而之后的一个位置,能够填入的可能性就会少一个。这样,直接用n重循环,考察每个位置就可以得到结果。不过针对本题,数组的长度是不固定的,直接用多重循环的方式显然不妥。我们

2021-05-23 16:19:17 713

原创 零钱兑换

题目介绍力扣322题:https://leetcode-cn.com/problems/coin-change/给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。分析这道题要求硬币总面值加起来等于amount,这是一个限制条件。而硬币个数无限供应,所以我们需要做的,就是在满足限制条件的前提下,对于不同的硬币组合,选择一个数量最少的组合。最简单的想

2021-05-23 10:47:07 64

原创 打家劫舍

题目介绍力扣198题:https://leetcode-cn.com/problems/house-robber/你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。分析由于不能偷窃连续的房屋,我们自然想到,隔一个偷一间显然是一个不错的选择。那是不是,直接计算

2021-05-23 10:38:46 74

原创 最长公共子序列

题目介绍力扣1143题:https://leetcode-cn.com/problems/longest-common-subsequence/给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序

2021-05-22 23:05:17 105

原创 爬楼梯

题目介绍力扣70题:https://leetcode-cn.com/problems/climbing-stairs/假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。分析这是一道非常经典的面试题。爬楼梯需要一步一步爬,很明显,这可以划分阶段、用动态规划的方法来解决。对于爬n级台阶,考虑它的最后一步,总是有两种情况可以到达:从n-1级台阶处,爬1个台阶;或者从n-2级台阶处,爬2个台阶。所以我们可以将

2021-05-22 17:47:11 54

原创 买卖股票的最佳时机

题目介绍力扣121题:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。分析最简单的想法是,直接找到最大最小值。但最小值

2021-05-22 16:46:30 76

原创 动态规划——01背包问题

基本介绍背包问题:有一个背包,容量为4磅,现有如下物品1)要求达到的目标为装入的背包的总价值最大,并且重量不超出。2)要求装入的物品不能重复分析背包问题主要指一个给定容量的背包,若干具有一定价值和重量的物品,如何选择物品放入背包使得物品放入背包的价值最大,其中又分为01背包和完全背包(完全背包指的是:每种物品都有无限件可用)。而01背包指的是每个物品最多放一个,并且完全背包可以转化为01背包问题。算法的主要思想:利用动态规划来解决,每次遍历的第i个物品,根据w[i]和v[i]来确定是否需要将该

2021-05-22 15:55:06 859

原创 任务调度器

题目介绍力扣621题:https://leetcode-cn.com/problems/task-scheduler/给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任务,或者处于待命状态。然而,两个 相同种类 的任务之间必须有长度为整数 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。你需要

2021-05-20 23:10:13 720

原创 跳跃游戏II

题目介绍力扣45题:https://leetcode-cn.com/problems/jump-game-ii/给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。分析本题跳跃规则跟上题一致,并且已经保证可以到达最后一个位置,现在是希望得到最小的跳跃步数。要想步数最小,很容易想到的一个思路是,每一步都迈到最大,也就是直接跳到当前能达到的最远位置。这是典型的贪心策

2021-05-19 23:17:34 163 1

原创 跳跃游戏

题目介绍力扣55题:https://leetcode-cn.com/problems/jump-game/给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。分析这道题规定数组每个元素,就代表了可以跳跃的最大长度。我们发现,其实只要判断出当前最远可以到达的位置,那么在这之前的元素,其实统统可以跳过。所以我们采用的,就是一个贪心策略:每次都判断一下当前能到达的最远位置,然后再看接下来最远可以到哪里。解

2021-05-19 22:51:04 71

原创 验证二叉搜索树

题目介绍力扣98题:https://leetcode-cn.com/problems/validate-binary-search-tree/给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。分析按照二叉搜索树的性质,我们可以想到需要递归地进行判断。这里需要注意的是,如果二叉搜索树的左右子树不为空,那么左子树中的所有节点,值都应该小于根节点;

2021-05-18 23:46:01 563

原创 平衡二叉树

题目介绍力扣110题:https://leetcode-cn.com/problems/balanced-binary-tree/给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。分析根据定义,当且仅当一棵二叉树的左右子树也都是平衡二叉树时,这棵二叉树是平衡二叉树。因此可以使用递归的方式,判断二叉树是不是平衡二叉树,递归的顺序可以是自顶向下(类似先序遍历)或者自底向上(类似后序遍历)。方法一:自顶向

2021-05-18 23:22:43 963

原创 翻转二叉树

题目介绍力扣226题:https://leetcode-cn.com/problems/invert-binary-tree/翻转一棵二叉树。分析这是一道很经典的二叉树问题。显然,我们可以遍历这棵树,分别翻转左右子树,一层层递归调用,就可以翻转整个二叉树了。方法一:先序遍历容易想到,我们可以先考察根节点,把左右子树调换,然后再分别遍历左右子树、依次翻转每一部分就可以了。这对应的遍历方式,就是先序遍历。代码如下:// 1. 先序遍历public TreeNode invertTree1(T

2021-05-18 22:37:58 179

原创 合并区间

题目介绍力扣56题:https://leetcode-cn.com/problems/merge-intervals/以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。分析要判断两个区间[a1, b1], [a2, b2]是否可以合并,其实就是判断是否有a1 <= a2 <= b1,或者a2 <= a1 <= b

2021-05-16 19:05:18 169

原创 颜色分类

题目介绍力扣75题:https://leetcode-cn.com/problems/sort-colors/给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。分析本题是经典的“荷兰国旗问题”,由计算机科学家 Edsger W. Dijkstra 首先提出。荷兰国旗是由红白蓝3种颜色的条纹拼接而成,如下图所示:假设这样的条纹有多条,且各种颜色的数

2021-05-16 19:01:50 350 1

原创 数组中的第K个最大元素

题目介绍力扣215题:https://leetcode-cn.com/problems/kth-largest-element-in-an-array/在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。分析要寻找数组中第K大的元素,首先能想到的,当然就是直接排序。只要数组是有序的,那么接下来取出倒数第K个元素就可以了。public class KthLargestElement { // 直接调语言内置的排序方法

2021-05-16 18:51:15 241

原创 柱状图中最大的矩形

题目介绍力扣84题:https://leetcode-cn.com/problems/largest-rectangle-in-histogram/给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。分析...

2021-05-16 01:37:44 695

原创 有效的括号

题目介绍力扣20题:https://leetcode-cn.com/problems/valid-parentheses/给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:1.左括号必须用相同类型的右括号闭合。2.左括号必须以正确的顺序闭合。分析判断括号的有效性,这是一个非常经典的问题。由于给定字符串中只包含 ‘(’,’)’,’{’,’}’,’[’,’]’ ,所以我们不需要额外考虑非法字符的问题。对于合法的输入字符,关键

2021-05-15 15:34:28 64

原创 使用栈实现队列

题目介绍力扣232题:https://leetcode-cn.com/problems/implement-queue-using-stacks/请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否

2021-05-15 14:05:26 1744

空空如也

空空如也

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

TA关注的人

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