自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java中length,length(),size()的区别

length:是针对数组来说的,如果写了一个数组,想要知道数组的长度,则可以使用这个属性;length():是针对字符串String来说的,如果想看这个字符串的长度则用length()这个方法;size():是针对泛型集合来说的,如果想要知道这个泛型集合中有多少元素,即可使用size()这个方法。...

2021-02-27 20:19:50 311

原创 Servlet的生命周期

Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。(1)加载:容器通过类加载器使用servlet类对应的文件加载servlet(2)创建:通过调用servlet构造函数创建一个servlet对象(3)初始化:调用init方法初始化(4)处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求(5)卸载:调用destroy方法让servlet自己释放其占用的资源...

2021-02-26 14:41:34 151

原创 SPRING的事务传播特性

PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起。PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。PRO.

2021-02-26 14:27:44 148

原创 System.arrayCopy

下面是 System.arrayCopy的源代码声明 :public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)代码解释:  Object src : 原数组 int srcPos : 从元数据的起始位置开始  Object dest : 目标数组  int destPos : 目标数组的开始起始位置  int length : 要copy的数组的长度...

2021-02-25 12:36:46 79

原创 68 - II. 二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNod

2021-02-04 12:04:20 86

转载 68 - I. 二叉搜索树的最近公共祖先(迭代 / 递归,清晰图解)

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]方法一:迭代class Solution { public TreeNode lowestCommonAncestor(TreeNode roo

2021-02-03 21:58:11 117

转载 61. 扑克牌中的顺子

从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。方法一: 集合 Set + 遍历class Solution { public boolean isStraight(int[] nums) { Set<Integer> repeat = new HashSet<>(); int max = 0, min

2021-02-02 10:28:30 486

转载 58 - II. 左旋转字符串

方法一:字符串切片应用字符串切片函数,可方便实现左旋转字符串。class Solution { public String reverseLeftWords(String s, int n) { return s.substring(n, s.length()) + s.substring(0, n); }}方法二:列表遍历拼接若面试规定不允许使用 切片函数 ,则使用此方法。class Solution { public String re

2021-02-01 22:07:55 69

转载 58 - I. 翻转单词顺序

String类中的charAt()函数:从字符串中拿到指定索引上的字符。**String的substring方法:**截取选择括号范围内的字符string.trim()函数的作用: 去掉字符串首尾的空格。方法:双指针class Solution { public String reverseWords(String s) { s = s.trim(); // 删除首尾空格 int j = s.length() - 1, i = j; Str.

2021-02-01 21:45:46 65

转载 57 - II. 和为s的连续正数序列

输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。滑动窗口(双指针)class Solution { public int[][] findContinuousSequence(int target) { int i = 1, j = 2, s = 3; List<int[]> res = new ArrayList<>();

2021-01-31 15:01:46 62

转载 57. 和为s的两个数字

输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。class Solution { public int[] twoSum(int[] nums, int target) { int i = 0, j = nums.length - 1; while(i < j){ int s = nums[i] + nums[j]; if(s &lt

2021-01-30 20:33:35 63

转载 55 - II. 平衡二叉树

输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。方法一:后序遍历 + 剪枝 (从底至顶)此方法为本题的最优解法,但剪枝的方法不易第一时间想到。思路是对二叉树做后序遍历,从底至顶返回子树深度,若判定某子树不是平衡树则 “剪枝” ,直接向上返回。public class Solution55_2 { public boolean isBalanced(TreeNode root) { re

2021-01-30 11:32:46 72

转载 55 - I. 二叉树的深度

输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。例如:给定二叉树[3,9,20,null,null,15,7],后序遍历(DFS)树的后序遍历 / 深度优先搜索往往利用 递归 或 栈 实现,本文使用递归实现。关键点: 此树的深度和其左(右)子树的深度之间的关系。显然,此树的深度 等于 左子树的深度 与 右子树的深度 中的 最大值 +1 。/** * Definition for a binary tre

2021-01-29 10:50:59 58

转载 54. 二叉搜索树的第k大节点

给定一棵二叉搜索树,请找出其中第k大的节点。解题思路:本文解法基于此性质:二叉搜索树的中序遍历为 递增序列 。根据以上性质,易得二叉搜索树的 中序遍历 倒序为递减序列 。因此,求 “二叉搜索树第 k大的节点” 可转化为求 “此树的中序遍历倒序的第 k 个节点”。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * T

2021-01-28 21:42:25 56

转载 53 - II. 0~n-1中缺失的数字

一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。排序数组中的搜索问题,首先想到 二分法 解决。缺失的数字等于 “右子数组的首位元素” 对应的索引;因此考虑使用二分法查找 “右子数组的首位元素”class Solution { public int missingNumber(int[] nums) { int i = 0, j = nums.length

2021-01-27 09:40:56 92

转载 53. 最大子序和

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。动态规划的是首先对数组进行遍历,当前最大连续子序列和为 sum,结果为 ans如果 sum > 0,则说明 sum 对结果有增益效果,则 sum 保留并加上当前遍历数字如果 sum <= 0,则说明 sum 对结果无增益效果,需要舍弃,则 sum 直接更新为当前遍历数字 每次比较 sum 和 ans的大小,将最大值置为ans,遍历结束返回结果时间复杂度:O(n)class S

2021-01-26 12:13:07 55

原创 idea无法创建springboot项目

idea无法创建Spring Initializr项目https://start.aliyun.com/

2021-01-21 19:31:48 384

原创 如何在java中连接阿里云的redis

配置redis.conf本人的路径为:1.将bind 127.0.0.1 变成#bind 127.0.0.12.加redis密码requirepass 1234563.将redis.conf中的protected-mode yes改为 protected-mode no4.重启redisredis-cli -h 127.0.0.1 -p 6379 shutdownredis-server

2021-01-21 17:33:31 437

原创 linux如何连redis

输入命令vi /etc/redis.conf进入编辑模式进入redis命令redis-cli -h 127.0.0.1 -p 6379auth 123456

2021-01-21 16:00:33 143

转载 53 - I. 在排序数组中查找数字 I

统计一个数字在排序数组中出现的次数。return nums.count(target)解题思路:排序数组中的搜索问题,首先想到 二分法 解决。排序数组 nums 中的所有数字 target 形成一个窗口,记窗口的 左 / 右边界 索引分别为 left 和 right ,分别对应窗口左边 / 右边的首个元素。本题要求统计数字 target 的出现次数,可转化为:使用二分法分别找到 左边界 left 和 右边界 right ,易得数字 target 的数量为 right - left - 1

2021-01-21 13:12:29 117

原创 52. 两个链表的第一个公共节点

/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNode getIntersectionN..

2021-01-21 12:03:49 54

原创 50. 第一个只出现一次的字符

在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。class Solution { public char firstUniqChar(String s) { HashMap<Character,Boolean> dic = new HashMap<>(); char[] sc = s.toCharArray(); for(char c : sc){ dic.

2021-01-15 16:24:50 60

原创 42. 连续子数组的最大和

输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。动态规划法:题解看https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof/solution/mian-shi-ti-42-lian-xu-zi-shu-zu-de-zui-da-he-do-2/class Solution { public int maxSubArray(int[] nums) {

2021-01-14 20:01:37 81

转载 39. 数组中出现次数超过一半的数字

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。解题思路:本文将 “数组中出现次数超过一半的数字” 简称为 “众数” 。 需要注意的是,数学中众数的定义为 “数组中出现次数最多的数字”,与本文定义不同。本题常见的三种解法:哈希表统计法: 遍历数组 nums ,用 HashMap 统计各数字的数量,即可找出 众数 。此方法时间和空间复杂度均为 O(N)。数组排序法: 将数组 nums 排序,数组中点的元素 一定为众数。

2021-01-06 11:22:34 94

原创 32 - III. 从上到下打印二叉树 III

请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如:给定二叉树: [3,9,20,null,null,15,7],/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNo

2021-01-05 13:35:32 67

原创 32 - II. 从上到下打印二叉树 II

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树: [3,9,20,null,null,15,7],/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class

2021-01-03 21:18:35 67

转载 32 - I. 从上到下打印二叉树

从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。因为我们无法提前知道树的节点个数,因此需要先用可变数组来做,最后转成数组{{ add(root); }} 第一层花括号是构造一个匿名类,里面那层花括号是代码块;可拆分为: Queue queue = new LinkedList<>(); queue.add(root);/** * Definition for a binary tree node. * public class TreeNode { *

2021-01-03 13:57:34 115 1

原创 30. 包含min函数的栈

小提示:Stack.Peek 与 stack.pop 的区别相同点:大家都返回栈顶的值。不同点:peek 不改变栈的值(不删除栈顶的值),pop会把栈顶的值删除。定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是O(1)。class MinStack { Stack<Integer> A,B; /** initialize your data structure here. */

2021-01-02 12:15:07 65

转载 29. 顺时针打印矩阵

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。解题思路:根据题目示例 matrix = [[1,2,3],[4,5,6],[7,8,9]] 的对应输出 [1,2,3,6,9,8,7,4,5]可以发现,顺时针打印矩阵的顺序是 “从左向右、从上向下、从右向左、从下向上” 循环。因此,考虑设定矩阵的“左、上、右、下”四个边界,模拟以上矩阵遍历顺序。算法流程:空值处理: 当 matrix 为空时,直接返回空列表 [] 即可。初始化: 矩阵 左、右、上、下 四个边界 l

2020-12-19 14:14:03 302 1

转载 28. 对称的二叉树

解题思路:对称二叉树定义: 对于树中 任意两个对称节点 LL 和 RR ,一定有:L.val = R.valL.val=R.val :即此两对称节点值相等。L.left.val = R.right.valL.left.val=R.right.val :即 LL 的 左子节点 和 RR 的右子节点 对称;L.right.val = R.left.valL.right.val=R.left.val :即 LL 的 右子节点 和 RR 的左子节点 对称。根据以上规律,考虑从顶至底递归

2020-12-18 08:57:57 102

原创 25. 合并两个排序的链表

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode dum = new ListNode(0),cur = dum; while(l1 != null && l2 != null){ if(l1.val <=l2.val){

2020-12-11 09:11:56 135 1

原创 27. 二叉树的镜像

class Solution { public TreeNode mirrorTree(TreeNode root) { if(root == null) return null; TreeNode tmp = root.left; root.left = mirrorTree(root.right); root.right = mirrorTree(tmp); return root; }}

2020-12-09 15:45:45 115

转载 24. 反转链表

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。方法一:迭代(双指针)curd表示需要指向末端的节点,也就是prepre一开始指向null,也就是第一个节点要指向空,第二个节点要指向第一个节点,第三个指向第二个…tmp则暂存当前要改变指向节点的下一个节点,方便后续节点重复操作。一次操作后 ListNode tmp = curd.next; curd.next = pre;,将pre往下走也就是=curd,curd则再往前走,变成原来curd.nex

2020-12-08 15:16:49 93

原创 22. 链表中倒数第k个节点

输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。class Solution { public ListNode getKthFromEnd(ListNode head, int k) { ListNode former = head, latter = head; for(int

2020-12-08 10:41:57 62

转载 21. 调整数组顺序使奇数位于偶数前面

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。解题思路:考虑定义双指针 ii , jj 分列数组左右两端,循环执行:指针 ii 从左向右寻找偶数;指针 jj 从右向左寻找奇数;将 偶数 nums[i]nums[i] 和 奇数 nums[j]nums[j] 交换。可始终保证: 指针 ii 左边都是奇数,指针 jj 右边都是偶数 。算法流程:初始化: ii , jj 双指针,分别指向数组 numsnums 左右两端;循环交换

2020-12-06 23:33:33 52

原创 18. 删除链表的节点

给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode dele

2020-12-03 15:15:04 94

转载 17. 打印从1到最大的n位数

输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。class Solution { public int[] printNumbers(int n) { int end = (int)Math.pow(10, n) - 1; int[] res = new int[end]; for(int i = 0; i < end; i++) res

2020-12-03 12:38:46 117

转载 15. 二进制中1的个数

请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int res = 0; while(n != 0){

2020-12-03 11:37:36 85

转载 12. 矩阵中的路径( DFS + 剪枝 ,清晰图解)

解题思路:本问题是典型的矩阵搜索问题,可使用 深度优先搜索(DFS)+ 剪枝 解决。深度优先搜索: 可以理解为暴力法遍历矩阵中所有字符串可能性。DFS 通过递归,先朝一个方向搜到底,再回溯至上个节点,沿另一个方向搜索,以此类推。剪枝: 在搜索中,遇到这条路不可能和目标字符串匹配成功 的情况(例如:此矩阵元素和目标字符不同、此元素已被访问),则应立即返回,称之为 可行性剪枝 。class Solution { public boolean exist(char[][] board, Stri

2020-12-02 13:35:37 194

原创 11. 旋转数组的最小数字

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。分为左序列和右序列,左序列必定大于又序列,并且每个序列递增。所以第一次判断判断nums[m]是否大于nums[j],如果大于,则左边肯定全都是左序列,把 i 挪到 m+1 位置上。 如果小于,则把j放在m的位置上,m再重新计算,因为m的位置可能就是交换点,所以不能m-1. 如果m j 位

2020-11-30 17:14:42 53

空空如也

空空如也

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

TA关注的人

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