自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(222)
  • 资源 (1)
  • 收藏
  • 关注

原创 三种遍历方式构造二叉树

105. 从前序与中序遍历序列构造二叉树给定一棵树的前序遍历 preorder 与中序遍历 inorder。请构造二叉树并返回其根节点。解题思路:求出根结点的值 rootVal(先序遍历第一个)求出根结点在中序遍历的位置rootIndex(预先存储在map中)求出左子树的个数 leftNum = rootIndex - inStart中序遍历中,左子树:[inStart, rootIndex - 1], 右子树:[rootIndex + 1, inEnd]前序遍历中,左子树:[preSt

2021-08-22 16:43:42 265

原创 mysql的连接配置时区问题

mysql 5之前的配置:driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=falseusername=****password= ****mysql 6之后的配置:设置时区serverTimezone为UTC比北京时间早8个小时。driverClassName=com.mysql.cj

2021-07-18 15:40:16 427

原创 Java8新特性

一、集合1、HashMap数组+链表+红黑树2、HashSet数组+链表+红黑树3、ConcurrentHashMapCAS + Synchronized二、JVM方法区:永久代PremGen --> 元空间MetaSpace(物理内存)三、Lambda 表达式1、从匿名类到Lambda的转换匿名内部类//原来的匿名内部类 @Test public void test1(){ Comparator<String> com = new Compar

2021-06-19 17:58:39 190

原创 解决redis远程连接超时:Connection timed out

今天在项目中连接远程redis时,抛出连接超时异常:connect timed out。详细信息例如以下:org.springframework.data.redis.connection.PoolException: Could not get a resource from the pool; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to 192.168.xxx.xxx:6379

2021-04-10 20:02:11 6813 1

原创 LeetCode-468. 验证IP地址

难度:中等编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址。如果是有效的 IPv4 地址,返回 “IPv4” ;如果是有效的 IPv6 地址,返回 “IPv6” ;如果不是上述类型的 IP 地址,返回 “Neither” 。IPv4 地址由十进制数和点来表示,每个地址包含 4 个十进制数,其范围为 0 - 255, 用(".")分割。比如,172.16.254.1;同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。IPv6

2020-12-29 15:16:06 88

原创 LeetCode-874. 模拟行走机器人

难度:简单机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令:-2:向左转 90 度-1:向右转 90 度1 <= x <= 9:向前移动 x 个单位长度在网格上有一些格子被视为障碍物。第 i 个障碍物位于网格点 (obstacles[i][0],obstacles[i][1]obstacles[i][0], obstacles[i][1]obstacles[i][0],obstacles[i][1])机器人无法走到

2020-12-15 11:17:04 129

原创 LeetCode-611. 有效三角形的个数

难度:【中等】给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。示例 1:输入: [2,2,3,4]输出: 3解释:有效的组合是:2,3,4 (使用第一个 2)2,3,4 (使用第二个 2)2,2,3注意:数组长度不超过1000。数组里整数的范围为 [0, 1000]。解题思路:首先对数组排序。固定最长的一条边,然后使用双指针 i 和 j 扫描剩余的元素,i指向数组头,j指向最长边的前一个元素。如果 nums[i] + nums[j

2020-11-11 20:09:16 263

原创 LeetCode-554. 砖墙

难度:【中等】你的面前有一堵矩形的、由多行砖块组成的砖墙。 这些砖块高度相同但是宽度不同。你现在要画一条自顶向下的、穿过最少砖块的垂线。砖墙由行的列表表示。 每一行都是一个代表从左至右每块砖的宽度的整数列表。如果你画的线只是从砖块的边缘经过,就不算穿过这块砖。你需要找出怎样画才能使这条线穿过的砖块数量最少,并且返回穿过的砖块数量。你不能沿着墙的两个垂直边缘之一画线,这样显然是没有穿过一块砖的。示例:输入: [[1,2,2,1],[3,1,2],[1,3,2],[2,4],[3,1,2]

2020-10-07 16:23:13 137

原创 LeetCode-599. 两个列表的最小索引总和

难度:简单假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设总是存在一个答案。示例:示例 1:输入:[“Shogun”, “Tapioca Express”, “Burger King”, “KFC”][“Piatti”, “The Grill at Torrey Pines”, “Hungry Hunter Ste

2020-10-07 15:22:53 195

原创 LeetCode-532. 数组中的 k-diff 数对

难度:【中等】给定一个整数数组和一个整数 k,你需要在数组里找到不同的 k-diff 数对。这里将 k-diff 数对定义为一个整数对 (i, j),其中 i 和 j 都是数组中的数字,且两数之差的绝对值是 k 。示例:示例 1:输入:[3, 1, 4, 1, 5], k = 2输出:2解释:数组中有两个 2-diff 数对, (1, 3) 和 (3, 5)。尽管数组中有两个1,但我们只应返回不同的数对的数量。示例 2:输入:[1, 2, 3, 4, 5], k = 1输出:4解释:

2020-10-03 20:05:37 87

原创 LeetCode-633. 平方数之和

难度:【中等】给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。示例:示例 1:输入:c = 5输出:true解释:1 * 1 + 2 * 2 = 5示例 2:输入:c = 3输出:false示例 3:输入:c = 4输出:true示例 4:输入:c = 2输出:true示例 5:输入:c = 1输出:true提示:0 <= c <= 231 - 1解题思路:双指针;先计算出某个平方数最接近目标数值的整

2020-10-02 20:19:24 189

原创 LeetCode-71. 简化路径

难度:【中等】以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必须是表示绝对路径的最短字符串

2020-09-22 17:06:11 88

原创 LeetCode-539. 最小时间差

难度:中等给定一个 24 小时制(小时:分钟)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。示例 1:输入: [“23:59”,“00:00”]输出: 1备注:列表中时间数在 2~20000 之间。每个时间取值在 00:00~23:59 之间。解题思路:将所有时间点转化为分钟数,由于分钟数最多为24*60,所以我们将其映射到一个大小为1440的数组中进行求解,数组中存储 该位置索引对应的分钟数 所出现的次数,若存在大于1的情况,则最小时间差必为0。之后,按照顺序求解相

2020-09-09 15:13:57 226

原创 LeetCode-598. 范围求和 II

难度:【简单】给定一个初始元素全部为 0,大小为 m*n 的矩阵 M 以及在 M 上的一系列更新操作。操作用二维数组表示,其中的每个操作用一个含有两个正整数 a 和 b 的数组表示,含义是将所有符合 0 <= i < a 以及 0 <= j < b 的元素 M[i][j] 的值都增加 1。在执行给定的一系列操作后,你需要返回矩阵中含有最大整数的元素个数。示例:示例 1:输入:m = 3, n = 3operations = [[2,2],[3,3]]输出: 4解

2020-08-27 22:59:01 121

原创 LeetCode-129. 求根到叶子节点数字之和

难度:【中等】给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。示例:示例 1:输入: [1,2,3]1/ 2 3输出: 25解释:从根到叶子节点路径 1->2 代表数字 12.从根到叶子节点路径 1->3 代表数字 13.因此,数字总和 = 12 + 13 = 25.

2020-08-17 15:31:00 109

原创 LeetCode -48. 旋转图像

难度:【中等】给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例:示例 1:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]示例 2:给定 matrix =[[ 5, 1, 9,11],[ 2, 4, 8,10],[13, 3, 6

2020-08-10 15:54:03 110

原创 LeetCode-213. 打家劫舍 II

难度:【中等】你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例:示例 1:输入: [2,3,2]输出: 3解释: 你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是

2020-08-05 10:32:02 115

原创 LeetCode-415. 字符串相加

难度:简单给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。注意:num1 和num2 的长度都小于 5100.num1 和num2 都只包含数字 0-9.num1 和num2 都不包含任何前导零。你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。解题思路:设定 i,j 两指针分别指向 num1,num2 尾部,模拟人工加法;计算进位: 计算 carry = sum/10,代表当前位相加是否产生进位;添加当前位: 计

2020-08-03 09:20:01 92

原创 LeetCode-114. 二叉树展开为链表

难度:【中等】给定一个二叉树,原地将它展开为一个单链表。示例:例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1 \ 2 \ 3 \ 4 \ 5 \ 6解题思路:对于当前节点,如果其左子节点不为空,则在其左子树中找到最右边的节点,作为前驱节点,将当前节点的右子节点赋给前驱节点的右子节点,然后将当前节点的左子节点赋给当前节点

2020-08-02 09:56:06 101

原创 LeetCode-725. 分隔链表

难度:【中等】给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分。每部分的长度应该尽可能的相等: 任意两部分的长度差距不能超过 1,也就是说可能有些部分为 null。这k个部分应该按照在链表中出现的顺序进行输出,并且排在前面的部分的长度应该大于或等于后面的长度。返回一个符合上述规则的链表的列表。举例: 1->2->3->4, k = 5 // 5 结果 [ [1], [2], [3], [4], null ]示例:示例 1:输入:root

2020-07-28 09:00:51 81

原创 LeetCode-61. 旋转链表

难度:【中等】给定一个链表,旋转链表,将链表每个节点向右移动 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->1->2->3->NULL示例 2:输入: 0->1

2020-07-27 22:15:32 78

原创 LeetCode-16. 最接近的三数之和

难度:【中等】给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。提示:3<=nums.length<=1033 <= nums.length <= 10^33<=num

2020-07-20 10:39:21 86

原创 LeetCode-63. 不同路径 II

题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。说明:m 和 n 的值均不超过 100。示例 :输入:[[0,0,0],[0,1,0],[0,0,0]]输出: 2解释:3x3 网格的正中间有一个障碍物。从左上角到右下

2020-07-06 22:43:11 82

原创 LeetCode-62. 不同路径

题目:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?示例:示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向右 -> 向下向右 -> 向下 -> 向右向下 -&

2020-07-06 22:40:23 110

原创 LeetCode-718. 最长重复子数组

题目给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出:3解释:长度最长的公共子数组是 [3, 2, 1] 。提示:1 <= len(A), len(B) <= 10000 <= A[i], B[i] < 100思路【动态规划】:第 1 步:定义状态dp[i][j] 的含义是:对于 A[1..i] 和 B[1..j],它们的 最长重复子数组 长度是 dp[i

2020-07-01 23:08:29 138

原创 LeetCode-297. 二叉树的序列化与反序列化

题目:序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。示例:你可以将以下二叉树: 1 / \ 2 3 / \ 4 5序列化为 “[1,2,3,null,

2020-06-16 15:35:42 110

原创 LeetCode-993. 二叉树的堂兄弟节点

题目在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。如果二叉树的两个节点深度相同,但父节点不同,则它们是一对堂兄弟节点。我们给出了具有唯一值的二叉树的根节点 root,以及树中两个不同节点的值 x 和 y。只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true。否则,返回 false。示例示例 1:输入:root = [1,2,3,4], x = 4, y = 3输出:false示例 2:输入:root = [1,2,3,nul

2020-06-07 16:58:39 125

原创 LeetCode-154. 寻找旋转排序数组中的最小值 II

题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。注意数组中可能存在重复的元素。示例示例 1:输入: [1,3,5]输出: 1示例 2:输入: [2,2,2,0,1]输出: 0说明:这道题是 寻找旋转排序数组中的最小值 的延伸题目。允许重复会影响算法的时间复杂度吗?会如何影响,为什么?解题思路:和LeetCode-153.寻找旋转排序数组中的最

2020-06-05 22:41:08 97

原创 LeetCode-153. 寻找旋转排序数组中的最小值

题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。示例示例 1:输入: [3,4,5,1,2]输出: 1示例 2:输入: [4,5,6,7,0,1,2]输出: 0解题思路思想:二分搜索如果中值 < 右值,则最小值在左半边,可以收缩右边界。如果中值 >= 右值,则最小值在右半边,可以收缩左边界。如果两

2020-06-05 21:49:53 94

原创 LeetCode-59. 螺旋矩阵 II

题目:给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入: 3输出:[[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7, 6, 5 ]]解题思路:设置这样四个变量:a:左上角,往数组右边走(行),b:左上角,往数组下边走(列),c:右下角,往数组上边走(行),d:右下角,往数组左边走(列),这样就形成了一个矩形先遍历a行b到d-1列,然后遍历d列a到c-1行,然后是c行d到b-1列,最后是b列c到a-1行,

2020-06-05 21:22:50 140

原创 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,12,11,10,9,5,6,7]解题思路以一个整体的思想去看待这个问题,可以设置这样四

2020-06-05 19:53:09 80

原创 LeetCode-220. 存在重复元素 III

题目给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 ķ。示例示例 1:输入: nums = [1,2,3,1], k = 3, t = 0输出: true示例 2:输入: nums = [1,0,1,1], k = 1, t = 2输出: true示例 3:输入: nums = [1,5,9,1,5,9], k = 2, t = 3输出: false

2020-06-04 10:30:13 87

原创 LeetCode-219. 存在重复元素 II

题目给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true思路:哈希表维护一个哈希表,里面始终最多包含 k 个元素,当出现重复值时则说明在 k 距离内存在重复元素;每次遍历一个元素则将其加

2020-06-04 10:07:50 81

原创 LeetCode-217. 存在重复元素

题目给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true思路1:排序+比较先排序,再比较元素代码实现:class Solution { public boolean conta

2020-06-04 10:02:19 86

原创 LeetCode-110. 平衡二叉树

题目给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 /

2020-06-02 22:31:49 100

原创 LeetCode-面试题54. 二叉搜索树的第k大节点

题目给定一棵二叉搜索树,请找出其中第k大的节点。示例示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 4示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4 / 1输出: 4限制:1 ≤ k ≤ 二叉搜索树元素个数解题思路:二叉搜索树中序遍历是升序的,所有

2020-06-02 21:44:59 98

原创 LeetCode-143. 重排链表

题目给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.解题思路1:遍历链表求表长,然后申请

2020-05-31 12:16:24 327

原创 LeetCode-24. 两两交换链表中的节点

题目给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例给定 1->2->3->4, 你应该返回 2->1->4->3.解题思路使用三个结点,pre,cur,next分别表示当前结点前一结点,当前结点,当前结点后一结点完成交换。先定位到要交换的两个结点,再修改指针指向完成交换更新结点的位置,继续进行下一组结点的交换直到遍历完整个链表,返回交换后链表的头结点即可代码实现

2020-05-31 10:19:24 80

原创 LeetCode-287. 寻找重复数

题目:给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例:示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组是只读的)。只能使用额外的 O(1) 的空间。时间复杂度小于 O(n2) 。数组中只有一个重复的数字,但它可能不止重复出现一次。解题思路:思想:二分法依据

2020-05-26 22:37:14 103

原创 LeetCode-146. LRU缓存机制

题目:运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥已经存在,则变更其数据值;如果密钥不存在,则插入该组「密钥/数据值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。进阶:你是否可以在 O(

2020-05-25 23:38:48 89

空空如也

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

TA关注的人

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