- 博客(121)
- 资源 (2)
- 收藏
- 关注
原创 spring声明式事务总结
在spring框架下,一般使用注解@Transactional,在一个bean的方法头声明此方法中的对数据库的操作处于一个事务中,比如 @Transactional(rollbackFor = Exception.class) public void testAInsert() throws Exception { 在注解中可以用rollbackFor标注遇到哪种Throwable,比如E...
2020-03-02 00:02:03
238
原创 leetcode 78. 子集 击败99%
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] static List<List<Integer>> lists; public static ...
2020-02-15 14:27:58
235
原创 leetcode 77. 组合击败99.47%
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] static List<List<Integer>> lists; public static List<List<Integer>...
2020-02-15 13:35:05
300
原创 leetcode 75. 颜色分类 击败100%
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2] 进阶: 一个直观的解决方案是使用计数排序的两趟扫描算法。 首先,迭代计...
2020-02-14 17:41:35
152
原创 leetcode 74. 搜索二维矩阵
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性: 每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。 示例 1: 输入: matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] target = 3 输出: true 示例 2: 输入: matrix = [ ...
2020-02-14 15:01:33
166
原创 leetcode 73. 矩阵置零 击败100%
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ] 输出: [ [1,0,1], [0,0,0], [1,0,1] ] 示例 2: 输入: [ [0,1,2,0], [3,4,5,2], [1,3,1,5] ] 输出: [ [0,0,0,0], [0,4,5,0],...
2020-02-13 22:54:21
118
原创 leetcode 64. 最小路径和 击败98%
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。 在二维动态规划下,优化成一维来做 public static int minPathSum(int[][] gri...
2020-02-13 17:19:19
112
原创 leetcode 63. 不同路径 II
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 网格中的障碍物和空位置分别用 1 和 0 来表示。 说明:m 和 n 的值均不超过 100。 示例 1: 输入: [ [0,0,0], [0...
2020-02-12 17:55:14
110
原创 leetcode 62. 不同路径 击败100%
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径? 说明:m 和 n 的值均不超过 100。 示例 1: 输入: m = 3, n = 2 输出: 3 解释: 从左上角开始,总共有 3 条路径可以到达右下角。 向右 -> 向...
2020-02-12 17:44:01
146
原创 leetcode 61. 旋转链表 击败99.98%
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出: 4->5->1->2->3->NULL 解释: 向右旋转 1 步:5->1->2->3->4->NULL 向右旋转 2 步: 4->5-&...
2020-02-11 20:13:58
103
原创 leetcode 60. 第k个排列 击败100%
给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: “123” “132” “213” “231” “312” “321” 给定 n 和 k,返回第 k 个排列。 说明: 给定 n 的范围是 [1, 9]。 给定 k 的范围是[1, n!]。 示例 1: 输入: n = 3, k = 3 输出: “21...
2020-02-11 17:14:43
145
原创 leetcode 59. 螺旋矩阵 II 击败20.83%
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] public int[][] generateMatrix(int n) { if (n == 1) { int[][] A = new in...
2020-02-10 17:54:19
134
原创 leetcode56. 合并区间 击败70%
给出一个区间的集合,请合并所有重叠的区间。 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入: [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。 publ...
2020-02-07 16:40:46
126
原创 leetcode 55. 跳跃游戏 击败99.98%
给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。 示例 2: 输入: [3,2,1,0,4] 输出: false 解释: 无论怎样,你总会到...
2020-02-07 11:52:52
145
原创 spring循环依赖问题
spring在DefaultSingletonBeanRegistry类中有以下几种缓存池: /** Cache of singleton objects: bean name to bean instance. */ //singletonObjects:key存bean name,value存bean实例 private final Map<String, Object> s...
2020-02-06 17:45:23
1427
原创 leetcode 49. 字母异位词分组 击败86%
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。 示例: 输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”], 输出: [ [“ate”,“eat”,“tea”], [“nat”,“tan”], [“bat”] ] 说明: 所有输入均为小写字母。 不考虑答案输出的顺序。 //用排序后的字符串作为key,相同...
2020-02-04 18:30:03
107
原创 leetcode 48. 旋转图像 击败100%
给定一个 n × n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示例 1: 给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ] 示例...
2020-02-04 15:37:05
152
原创 leetcode 47. 全排列 II 击败96.5%
给定一个可包含重复数字的序列,返回所有不重复的全排列。 示例: 输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ] //思路就是通过递归做深度搜索,先对数组排序 //每次做深度搜索之前,先判断这轮循环是不是有相同元素做过递归,比如num[i]==num[i-1] && !visit[i],达到剪枝的目的 List<...
2020-02-02 15:36:14
116
原创 leetcode 43. 字符串相乘 击败83%
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 示例 1: 输入: num1 = “2”, num2 = “3” 输出: “6” 示例 2: 输入: num1 = “123”, num2 = “456” 输出: “56088” 说明: num1 和 num2 的长度小于110。 num1 和 num2 只包含数字 ...
2020-02-02 14:51:47
112
原创 leetcode 40. 组合总和 II 击败98%
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用一次。 说明: 所有数字(包括目标数)都是正整数。 解集不能包含重复的组合。 示例 1: 输入: candidates = [10,1,2,7,6,1,5], target = 8, 所求解集为: [ ...
2020-01-31 15:47:28
107
原创 leetcode 39. 组合总和 击败98.03%
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 target)都是正整数。 解集不能包含重复的组合。 示例 1: 输入: candidates = [2,3,6,7], target = 7, 所求解集为: [ ...
2020-01-31 13:26:51
110
原创 leetcode 34. 在排序数组中查找元素的第一个和最后一个位置 击败100%
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4] 示例 2: 输入: nums = [5,7,7,8,8,10], tar...
2020-01-28 19:29:07
107
原创 leetcode 31. 下一个排列 击败99.97%
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须原地修改,只允许使用额外常数空间。 以下是一些例子,输入位于左侧列,其相应输出位于右侧列。 1,2,3 → 1,3,2 3,2,1 → 1,2,3 1,1,5 → 1,5,1 public static void nextPer...
2020-01-28 17:21:40
117
原创 leetcode 29. 两数相除 击败100%
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 示例 1: 输入: dividend = 10, divisor = 3 输出: 3 示例 2: 输入: dividend = 7, divisor = -3 输出: -2 说明: 被除数和除数均为 32 位有符...
2020-01-27 15:08:18
151
原创 leetcode 24. 两两交换链表中的节点 击败100%
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. public ListNode swapPairs(ListNode head) { if(head == null || head.next =...
2020-01-25 22:09:17
97
原创 leetcode 22. 括号生成 击败99.57%
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 例如,给出 n = 3,生成结果为: [ “((()))”, “(()())”, “(())()”, “()(())”, “()()()” ] static List<String> lists; static public List<String>...
2020-01-25 17:09:32
157
原创 leetcode 19. 删除链表的倒数第N个节点 击败100%
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? static int num; public static ListNo...
2020-01-24 23:33:35
90
原创 leetcode 481. 神奇字符串 击败100%
神奇的字符串 S 只包含 ‘1’ 和 ‘2’,并遵守以下规则: 字符串 S 是神奇的,因为串联字符 ‘1’ 和 ‘2’ 的连续出现次数会生成字符串 S 本身。 字符串 S 的前几个元素如下:S = “1221121221221121122 …” 如果我们将 S 中连续的 1 和 2 进行分组,它将变成: 1 22 11 2 1 22 1 22 11 2 11 22 … 并且每个组中 ‘1’ 或 ...
2020-01-23 22:09:41
186
原创 478. 在圆内随机生成点 击败97.76%
给定圆的半径和圆心的 x、y 坐标,写一个在圆中产生均匀随机点的函数 randPoint 。 说明: 输入值和输出值都将是浮点数。 圆的半径和圆心的 x、y 坐标将作为参数传递给类的构造函数。 圆周上的点也认为是在圆中。 randPoint 返回一个包含随机点的x坐标和y坐标的大小为2的数组。 示例 1: 输入: [“Solution”,“randPoint”,“randPoint”,“ran...
2020-01-21 13:45:58
140
原创 leetcode 477. 汉明距离总和 击败97.79%
两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。 计算一个数组中,任意两个数之间汉明距离的总和。 示例: 输入: 4, 14, 2 输出: 6 解释: 在二进制表示中,4表示为0100,14表示为1110,2表示为0010。(这样表示是为了体现后四位之间关系) 所以答案为: HammingDistance(4, 14) + HammingDistance(4, 2) + Ham...
2020-01-20 23:34:24
103
原创 LeetCode 18. 四数之和 击败82%
给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意: 答案中不可以包含重复的四元组。 示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。 满足要求的四元组集合为: [ ...
2020-01-18 16:26:21
96
原创 leetcode 474. 一和零 击败99.3%
在计算机界中,我们总是追求用有限的资源获取最大的收益。 现在,假设你分别支配着 m 个 0 和 n 个 1。另外,还有一个仅包含 0 和 1 字符串的数组。 你的任务是使用给定的 m 个 0 和 n 个 1 ,找到能拼出存在于数组中的字符串的最大数量。每个 0 和 1 至多被使用一次。 注意: 给定 0 和 1 的数量都不会超过 100。 给定字符串数组的长度不会超过 600。 示例 1: 输入...
2020-01-16 23:47:05
103
原创 leetcode 473. 火柴拼正方形 通过快速判断击败100%
还记得童话《卖火柴的小女孩》吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法。不能折断火柴,可以把火柴连接起来,并且每根火柴都要用到。 输入为小女孩拥有火柴的数目,每根火柴用其长度表示。输出即为是否能用所有的火柴拼成正方形。 示例 1: 输入: [1,1,2,2,2] 输出: true 解释: 能拼成一个边长为2的正方形,每边两根火柴。 示例 2: 输入: [3,...
2020-01-15 22:58:51
157
原创 guava RateLimiter源码解读
@CanIgnoreReturnValue //permits是此线程这次要取的令牌数 public double acquire(int permits) { //返回获得这些数量的令牌需要等待的时间 long microsToWait = reserve(permits); //等待此段时间,期间不响应中断 stopwatch.sleepMicrosUnin...
2019-11-29 00:57:16
520
原创 LeetCode 399. 除法求值
给出方程式 A / B = k, 其中 A 和 B 均为代表字符串的变量, k 是一个浮点型数字。根据已知方程式求解问题,并返回计算结果。如果结果不存在,则返回 -1.0。 示例 : 给定 a / b = 2.0, b / c = 3.0 问题: a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ? 返回 [6.0, 0.5, -1.0, ...
2019-11-02 18:55:14
188
原创 dubbo注册jvm关闭钩子时存在的问题
dubbo在停机时通过注册jvm关闭钩子来执行自身优雅停机工作,但当dubbo与spring一同运行时,由于spring也通过jvm关闭钩子注册: public abstract class AbstractApplicationContext: @Override public void registerShutdownHook() { if (this.shutdownHook == n...
2019-10-27 17:10:52
1037
原创 dubbo 优雅停机原理
dubbo优雅停机的实现,首先主要依赖于jvm的ShutdownHook钩子函数,例如dubbo 2.5.x版本,在AbstractConfig中定义了: static { Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { public void run() { ...
2019-10-26 18:42:39
1531
原创 leetcode 394. 字符串解码
给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。 此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] ...
2019-10-10 12:13:37
327
原创 leetcode 54. 螺旋矩阵
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,3,6,9,8,7,4,5] 示例 2: 输入: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] 输出: [1,2,3,4,8,1...
2019-07-27 16:44:48
138
原创 leetcde 17. 电话号码的字母组合
每个数字对应多个字母,要穷尽所有的组合可能,采用多叉树的结构,每遍历一个数字,在多叉树中就多了一层,即在当前的所有叶子节点下面再加上新数字对应的所有字母,形成新的多叉叶子节点。 将多叉树建立出来之后,再通过深度优先遍历整个树,遍历的时候每到一个叶子节点,就形成了从根节点到当前叶子节点的一个解答,遍历完之后的结果集就是答案。使用一个stringbuilder维持当前的从根节点到当前节点形成...
2019-07-20 15:38:46
138
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人