- 博客(121)
- 资源 (2)
- 收藏
- 关注
原创 spring声明式事务总结
在spring框架下,一般使用注解@Transactional,在一个bean的方法头声明此方法中的对数据库的操作处于一个事务中,比如@Transactional(rollbackFor = Exception.class)public void testAInsert() throws Exception {在注解中可以用rollbackFor标注遇到哪种Throwable,比如E...
2020-03-02 00:02:03
226
原创 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
225
原创 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
292
原创 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
140
原创 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
154
原创 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
104
原创 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
101
原创 leetcode 63. 不同路径 II
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。说明:m 和 n 的值均不超过 100。示例 1:输入:[[0,0,0],[0...
2020-02-12 17:55:14
99
原创 leetcode 62. 不同路径 击败100%
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?说明:m 和 n 的值均不超过 100。示例 1:输入: m = 3, n = 2 输出: 3 解释: 从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向...
2020-02-12 17:44:01
140
原创 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
93
原创 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
136
原创 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
130
原创 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
115
原创 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
135
原创 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
1413
原创 leetcode 49. 字母异位词分组 击败86%
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”], 输出: [[“ate”,“eat”,“tea”], [“nat”,“tan”], [“bat”] ] 说明:所有输入均为小写字母。 不考虑答案输出的顺序。//用排序后的字符串作为key,相同...
2020-02-04 18:30:03
97
原创 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
142
原创 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
107
原创 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
99
原创 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
96
原创 leetcode 39. 组合总和 击败98.03%
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。 解集不能包含重复的组合。 示例 1:输入: candidates = [2,3,6,7], target = 7, 所求解集为: [ ...
2020-01-31 13:26:51
103
原创 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
99
原创 leetcode 31. 下一个排列 击败99.97%
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1 public static void nextPer...
2020-01-28 17:21:40
112
原创 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
140
原创 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
90
原创 leetcode 22. 括号生成 击败99.57%
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ “((()))”, “(()())”, “(())()”, “()(())”, “()()()” ]static List<String> lists; static public List<String>...
2020-01-25 17:09:32
145
原创 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
80
原创 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
176
原创 478. 在圆内随机生成点 击败97.76%
给定圆的半径和圆心的 x、y 坐标,写一个在圆中产生均匀随机点的函数 randPoint 。说明:输入值和输出值都将是浮点数。 圆的半径和圆心的 x、y 坐标将作为参数传递给类的构造函数。 圆周上的点也认为是在圆中。 randPoint返回一个包含随机点的x坐标和y坐标的大小为2的数组。 示例 1:输入: [“Solution”,“randPoint”,“randPoint”,“ran...
2020-01-21 13:45:58
130
原创 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
95
原创 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
88
原创 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
96
原创 leetcode 473. 火柴拼正方形 通过快速判断击败100%
还记得童话《卖火柴的小女孩》吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法。不能折断火柴,可以把火柴连接起来,并且每根火柴都要用到。输入为小女孩拥有火柴的数目,每根火柴用其长度表示。输出即为是否能用所有的火柴拼成正方形。示例 1:输入: [1,1,2,2,2] 输出: true解释: 能拼成一个边长为2的正方形,每边两根火柴。 示例 2:输入: [3,...
2020-01-15 22:58:51
148
原创 guava RateLimiter源码解读
@CanIgnoreReturnValue //permits是此线程这次要取的令牌数 public double acquire(int permits) { //返回获得这些数量的令牌需要等待的时间 long microsToWait = reserve(permits); //等待此段时间,期间不响应中断 stopwatch.sleepMicrosUnin...
2019-11-29 00:57:16
508
原创 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
180
原创 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
1021
原创 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
1513
原创 leetcode 394. 字符串解码
给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] ...
2019-10-10 12:13:37
317
原创 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
111
原创 leetcde 17. 电话号码的字母组合
每个数字对应多个字母,要穷尽所有的组合可能,采用多叉树的结构,每遍历一个数字,在多叉树中就多了一层,即在当前的所有叶子节点下面再加上新数字对应的所有字母,形成新的多叉叶子节点。将多叉树建立出来之后,再通过深度优先遍历整个树,遍历的时候每到一个叶子节点,就形成了从根节点到当前叶子节点的一个解答,遍历完之后的结果集就是答案。使用一个stringbuilder维持当前的从根节点到当前节点形成...
2019-07-20 15:38:46
126
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人