自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Springboot + Redis 哨兵模式

Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。

2022-01-08 20:24:43 29606 5

原创 第四章 递归和动态规划(矩阵的最小路径和)

【题目】 给定一个矩阵M,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累计起来就是路径和,返回所有的路径中的最小路径和。如果给定的M如下:1 3 5 98 1 3 45 0 6 18 8 4 0路径1,3,1,0,6,1,0 是所有路径中路径和最小的,所以返回12【代码】public static int getMinDistance(int[][] arrs) { if (null =...

2021-09-19 17:00:18 163

原创 第三章 二叉树问题(派对的最大快乐值)

【题目】 员工信息的定义如下:public static class Employee { public int happy;// 这名员工可以带来的欢乐值 public List<Employee> employeeList;// 这名员工有哪些直接下级 public Employee(int happy, List<Employee> employeeList) { this.happy = happy; ...

2021-08-30 19:51:20 239

原创 第三章 二叉树问题(二叉树节点间的最大距离问题)

【题目】 从二叉树的节点A出发,可以向上走或者向下走,但沿途的节点只能经过一次,当到达节点B时,路径上的节点数叫作A到B的距离。【分析】以X为头结点的子树,总共3种情况,1、左子树 最大距离为 整棵树的最大距离2、右子树 最大距离为 整棵树的最大距离3、整棵树的最大距离为 左子树高度 + 右子树高度 + 1package zyc.binaryTree;public class P168_MaxDistance { /** * 以X为头结点的子树,总...

2021-08-29 20:24:15 199

原创 第三章 二叉树问题(通过有序数组生成平衡搜索二叉树)

【题目】 给定一个有序数字sortArr,已知其中没有重复值,用这个有序数组生成一棵平衡二叉树,并且该平衡二叉树中序遍历的结果与sortArr一致【分析】 用有序数组最中间的树生成二叉树的头节点,然后用这个树左边的树生成左子树,用右边的树生成右子树即可【代码】package zyc.binaryTree;public class P152_SortedArrToCbt { public static Node arrToCbt(int[] ar...

2021-08-26 21:03:51 131

原创 第三章 二叉树问题(判断一个数是否为完全二叉树)

【题目】 判断一棵树是否为完全二叉树。【分析】 1、按层遍历二叉树,从每层的左边向右边依次遍历所有的节点 2、如果当前结点有右节点,但没有左节点,直接返回false 3、如果当前节点并不是左右两个节点全有,那么之后的节点都必须为叶节点,否则返回false【代码】package zyc.binaryTree;import java.util.LinkedList;import java.util.Queue;pub...

2021-08-26 20:12:36 121

原创 第三章 二叉树问题(判断t1树是否包含t2树的全部拓扑结构)

【题目】 给定彼此独立的两颗树头结点分别是t1和t2,判断t1树是否包含t2树全部的拓扑结构package zyc.binaryTree;public class P143_ContainsTopology { public static void main(String[] args) { Node node = new Node(1); node.left = new Node(2); node.left.left =...

2021-08-25 21:03:23 141

原创 第三章 二叉树问题(找到搜索二叉树中的两个错误节点)

【题目】 一颗二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这个二叉树不再是搜索二叉树,请找到这两个错误节点并返回。package zyc.binaryTree;import java.util.Stack;public class P137_getTwoErrorNode { public static Node[] getTwoErrorNode(Node node) { Node[] errors = new Node[2]; ...

2021-08-24 22:56:53 290

原创 第三章 二叉树问题(二叉树的按层打印)

【题目】 给定一颗二叉树的头结点head,实现按层打印二叉树【代码】package zyc.binaryTree;import java.util.LinkedList;import java.util.Queue;public class P132_printBT { public static void main(String[] args) { Node node = new Node(10); node.left = ne...

2021-08-24 22:39:25 154

原创 第三章 二叉树问题(找到二叉树中的最大搜索二叉子树)

【题目】 给定一颗二叉树的头结点head,已知其中所有节点的值都不一样,找到含有节点最多的搜索二叉树,并返回这棵子树的头结点package zyc.binaryTree;/** * 找到二叉树中的最大搜索二叉树 */public class P121_maxBst { public static void main(String[] args) { Node node = new Node(10); node.left = new...

2021-08-24 22:33:45 154

原创 第三章 二叉树问题(在二叉树中找到累加和为指定值的最长路路径长度)

【题目】给定一棵二叉树的头节点head和一个32位整数sum,二叉树节点值类型为整型,求累加和为sum的最长路径长度。路径是指从某个节点往下,每次最多选择一个孩子节点或者不选所组成的节点链。package base;import java.util.HashMap;import java.util.Map;public class P119_BtMaxLen { /** * 获取最长路径长度 * @param head 头节点 * @...

2021-08-18 22:30:35 134

原创 第三章 二叉树问题(分别用递归和非递归的方式实现二叉树的先序、中序、后序遍历)

【题目】 用递归和非递归的方式,分别按照二叉树的先序、中序和后序打印所有的节点,我们约定:先序遍历顺序为根、左、右,中序遍历的顺序为左、根、右,后序遍历顺序为左、右、根。【解答】package zcy;import java.sql.Statement;import java.util.Stack;/** * 二叉树 */public class P94_BinaryTree { public static void preOrder(Node head...

2021-08-18 22:24:03 113

原创 第三章 二叉树问题(二叉树的序列化和反序列化)

【题目】 二叉树被记录成文件的过程叫做二叉树的序列化,通过文件内容重建二叉树的过程叫做二叉树的反序列化,给定一颗二叉树的头节点head,已知二叉树节点值的类型为32位整型。请设计一种二叉树序列化和反序列化方案,并用代码实现。【解答】package zcy;import java.util.LinkedList;import java.util.Queue;import java.util.Stack;// 通过先序遍历实现序列化和反序列化public class P...

2021-08-14 20:43:36 73

原创 第二章 链表问题(按照左右半区的方式重新组合单链表)

【题目】给定一个单链表的头部节点head,链表长度为N。 如果N为偶数,那么前N/2个节点算作左半区,后N/2个节点算作右半区; 如果N为奇数,那么前N/2个节点算作左半区,后N/2+1个节点算作右半区; 左半区从左到右依次记为L1->L2->...,右半区从左到右依次记为R1->R2->...。请将单链表调整成L1->R1->L2->R2->...的样子。 例如: 1->2->3->4 调整后:1->3->2...

2021-08-11 21:26:50 70

原创 第二章 链表问题(向有序的环形单链表中插入新节点)

【题目】一个环形单链表从头节点head开始不降序,同时由最后的节点指回头节点。给定一个环形单链表的头节点head和一个整数num,请生成节点值为num的新节点,并插入到这个环形链表中,保证调整后的链表依然有序。【解答】package zcy;public class P87_insertNewNode { public static void main(String[] args) { Node head = new Node(2); ...

2021-08-08 19:23:47 132

原创 第二章 链表问题(两个单链表相交的一系列问题)

【题目】​ 单链表可能有环,可能无环头节点 head1 和 head2, 这两个链表可能相交,也可能不相交。请实现一个函数, 如果两个链表相交, 请返回相交的第一个节点; 如果不相交, 返回 null 即可。​如果链表1的长度为N,链表2的长度为M,时间复杂度请达到O(N + M),额外的空间复杂度请达到O(1)。【解答】三个子问题,具体如下。​ 问题一:如何判断一个链表是否有环,如果有,返回第一个进入环的节点,没有则返回null。​ ...

2021-07-28 21:15:55 88

原创 第二章 链表问题(将单向链表按某值划分成左边小、中间相等、右边大的形式)

【题目】 给定一个单向链表的头节点head,节点的值类型是整型,再给定一个整数pivot。实现一个调整链表的函数,将链表调整为左部分都是值小于 pivot的节点,中间部分都是值等于pivot的节点,右部分都是值大于pivot的节点。除这个要求外,对调整后的节点顺序没有更多的要求。 例如:链表9->0->4->5->1,pivot=3。 调整后链表可以是1->0->4->9->5,也可以是0->1->9->5->4。总...

2021-07-15 22:09:05 111

原创 第二章 链表问题(判断一个链表是否为回文)

【题目】给定一个链表的头节点head,请判断该链表是否为回文结构。如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1)。例如:1->2->1,返回true1->2->2->1,返回true15->6->15,返回true1->2->3,返回false【解答】第一种解法 boolean isPalindrome(Node<Integer> head) { ...

2021-07-11 16:56:14 72

原创 第二章 链表问题(环形单链表的约瑟夫问题)

【题目】  据说著名犹太历史学家Josephus有过如下故事:在罗马人占领乔塔帕特后,39个犹太人和Josephus及他的朋友躲进一个洞里,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第一个人开始报数,报数到3的人就自杀,再由下一个人重新报1,报数到3的人就自杀,这样依次下去,知道剩下最后一个人时,那个人可以自由选择自己的命运。这就是著名的约瑟夫问题。现在请用单向链表描述该结构并呈现整个自杀过程。  输入:一个环形单向链表的头节点head和报数的值m返回

2021-07-11 16:18:41 68

原创 第二章 链表问题(反转双向链表)

【题目】实现反转双向链表的函数 DoubleNode<Integer> reverseDoubleNode(DoubleNode<Integer> head) { if (head == null || head.next == null) { return head; } DoubleNode<Integer> next = null; DoubleNode<I

2021-07-11 15:24:18 67

原创 第二章 链表问题(删除链表的中间节点和a/b处的节点)

【题目】1、删除链表的中间节点给定链表的头结点head,实现删除链表的中间节点的函数:例如:不删除任何节点;1-->2,删除节点1;1-->2-->3,删除节点21-->2-->3-->4,删除节点2;1-->2-->3-->4-->5,删除节点3; Node<Integer> delMid(Node<Integer> head) { // 找到中间节点 if

2021-07-11 14:54:37 154

原创 第二章 链表问题(在单链表和双链表中删除倒数第K个节点)

【题目】 分别实现两个函数,一个可以删除单链表中的倒数第K个节点,另一个可以删除双链表中倒数第K个节点public Node<Integer> deleteKthNode(Node<Integer> head, int k) { /* 若节点的长度为n, 需要删除的节点就是第 n - k + 1, 需要删除的上一个节点就是第n - k个节点 */ if (head == null || k ...

2021-07-10 17:32:58 71

原创 第二章 链表问题(打印两个有序列表的公共部分)

【】【】【题目】 给定两个有序链表的头指针 head1 和 head2,打印两个链表的公共部分【解答】package base;public class PrintCommonPart_P41 { void printCommonPart(Node<Integer> head1, Node<Integer> head2) { while (head1 != null && head2 != null) {...

2021-07-05 21:34:33 115

原创 第一章 栈和队列(最大值减去最小值小于或等于num的子数组数量)

【题目】给定数组arr和整数num,共返回有多少个子数组满足如下情况:max{arr[i..j]} - min{arr[i..j]} <= num,子数组中的最大值减去最小值小于或等于num。【基本思路】首先明确两点:  1、如果子数组arr[i…j]满足条件,那么arr[i…j]中的子数组一定也满足条件。  2、如果子数组arr[i…j]不满足条件,那么包含arr[i…j]的子数组一定也不满足条件过程: 1、...

2021-07-05 20:21:34 123

原创 第一章 栈和队列(求最大矩阵的大小)

题目:给定一个整型矩阵map, 其中的值只有0和1两种, 求其中全是1的所有矩形区域中, 最大的矩形区域为1的数量。示例:矩阵1 0 1 11 1 1 11 1 1 0其中,最大的矩形区域有6个1,所以返回6package base;import java.util.Stack;/** * 求最大子矩阵的大小 */public class MaxMatrix_P26 { public static void main(String[] args) {

2021-06-29 22:20:33 102

原创 第一章 栈和队列(单调栈结构)

题目描述给定一个可能含有重复值的数组 arr,找到每一个 i 位置左边和右边离 i 位置最近且值比 arr[i] 小的位置。返回所有位置相应的信息。输入描述:第一行输入一个数字 n,表示数组 arr 的长度。以下一行输入 n 个数字,表示数组的值输出描述:输出n行,每行两个数字 L 和 R,如果不存在,则值为 -1,下标从 0 开始。示例:输入73 4 1 5 6 2 7输出-1 20 2-1 -12 53 52 -15 -1 public stat

2021-06-29 22:01:25 92

原创 第一章 栈和队列(生成窗口最大值数组)

题目:有一个整型数组arr和一个大小为w的窗口从数组的最左边到最右边,窗口每次向右边滑一个位置,例如,数组为[4 3 5 4 3 3 6 7],窗口大小为3时。[4 3 5] 4 3 3 6 7 输出54 [3 5 4 ]3 3 6 7 输出54 3 [5 4 3 ]3 6 7 输出54 3 5[ 4 3 3] 6 7 输出44 3 5 4[ 3 3 6] 7 输出64 3 5 4 3[ 3 7 6] 输出 7如果数组长度为n,窗口长度为w,那么将生成n-w+1个值需...

2021-06-27 09:48:13 74

原创 第一章 栈和队列(用栈来求解汉诺塔问题)

题目:汉诺塔问题比较经典,这里修改一下游戏规则:现在限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中间。求当塔有n层的时候,打印最优移动过程和最优移动总步数。输入描述:输入一个数n,表示塔层数输出描述:按样例格式输出最优移动过程和最优移动总步数输入2输出Move 1 from left to midMove 1 from mid to rightMove 2 from left to midMove 1 from right to m

2021-06-27 08:52:07 244

原创 第一章 栈和队列(用一个栈实现另一个栈的排序)

题目:一个栈中元素的类型为整型,现在想将该栈从顶到底,按从大到小的顺序排序,只许申请一个栈,除此之外,可以申请新的变量,但不能申请额外的数据结构,如何完成排序思路: 将要排序的栈记为stack,申请的辅助栈为help,在栈上执行pop操作,弹出的元素记为cur。 1、如果cur小于或等于help的栈顶元素,则将cur直接压入help; 2、如果cur大于help中的栈顶元素,则将help的元素逐一弹出,逐一压入stack,直到cur...

2021-06-24 23:12:02 107

原创 第一章 栈和队列(猫狗队列)

class Pet { private String type; public Pet(String type) { this.type = type; } public String getType() { return type; } public void setType(String type) { this.type = type; }}class Dog extends Pet.

2021-06-24 22:42:57 128

原创 第一章 栈和队列(如何仅用递归函数和栈操作逆序一个栈)

题目: 一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别位5、4、3、2、1,将这个栈转置后,从栈顶到栈底位1、2、3、4、5,也就是实现找中的元素的逆序,但只能用递归函数来实现,不能用其他数据结构。思路: 本题考查栈的操作和递归函数的设计,我们需要设计两个递归函数。 递归函数一:将栈stack的栈底元素返回并移除,即每次弹出栈底元素 递归函数二:将栈的元素逆序package base;import java.uti...

2021-06-24 21:58:53 78

原创 第一章 栈和队列(由两个栈组成的队列)

题目: 编写一个类,用两个栈实现队列,支持队列的基本操作(add,poll,peek)思路: 1、定义两个栈 pushStack, popStack; 2、将数据先压入 pushStack,然后将 pushStack 中的数据倒入 popStack,然后从 popStack中取数据,即类似队列的先进先出 注意:pushStack 中的数据应该一次性倒入 popStack,否则顺序将错误 当 po...

2021-06-23 22:49:59 50

原创 第一章 栈和队列(设计一个有getMin功能的栈)

题目: 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作要求: 1、pop、push、getMin 操作的时间复杂度都是 O(1) 2、设计的栈类型可以使用现成的栈结构实现思路: 定义两个栈,stackData,保存栈的所有数据;stackMin,保存栈中的较小数据 1、入栈操作 a、数据直接压入 stackData 中 b、当 st...

2021-06-23 22:46:53 61

原创 判断链表是否为回文结构

【题目】 给定一个链表的头节点head,请判断该链表是否为回文结构。如果链表长度为N,时间复杂度达到O(N),额外空间复杂 度达到O(1)例如:1->2->1,返回true1->2->2->1,返回true15->6->15,返回true1->2->3, public static boolean method01(Node<Integer> head) { Node<Integer> n1 =.

2021-06-22 22:32:34 38 2

原创 一、链表(单链表反转)

在链表遍历的过程中将指针顺序置换,代码如下public static Node<String> reverse(Node<String> head) { Node<String> pre = null; Node<String> next = null; while (head != null) { next = head.next; head.next = pr

2021-06-16 22:42:46 41

原创 排序——基数排序

基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较package base;import java.util.Arrays;public class BaseSort { public static void main(String[] args) { int[] arr = new int[]{100, 1022, 2, 22}; int digit = countBiggestDigit(arr);

2021-06-13 21:08:58 71

原创 堆排序——拓展题目

题目:已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小,请选择一个合适的排序算法针对这个数据进行排序package base;import java.util.Arrays;import java.util.PriorityQueue;/*已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小,请选择一个合适的排序算法针对这个数据进行排序 */pub

2021-06-12 17:12:47 152

原创 栈(逆波兰表达式)

栈(逆波兰表达式)一、前言题目:3 + (2 + 5) * 6 - 5,用代码如何实现计算?这里引入两个概念“中缀表达式”,“后缀表达式”。中缀表达式        中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式是人们常用的算术表示方法。虽然人的大脑很容易理解与分析中缀表达式,但对计算机来说中缀表达式却是很复杂的,因此计算表达式的值时,通常需要先将中缀表达式转换为后缀表达式,

2021-01-17 11:55:42 303

原创 优先队列(最小优先队列)

优先队列(最小优先队列)前言        普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在某些情况下,我们可能需要找出队列中的最大值或者最小值,例如使用一个队列保存计算机的任务,一般情况下计算机的任务都是有优先级的,我们需要在这些计算机的任务中找出优先级最高的任务先执行,执行完毕后就需要把这个任务从队列中移除。普通的队列要完成这样的功能,需要每次遍历队列中的所有元素,比较并找出最大值,效率不是很高,

2021-01-10 16:47:49 1269

原创 优先队列(最大优先队列)

优先队列(最大优先队列)前言一、最大优先队列1、最大优先队列API设计2、代码3、测试用例4、输出结果前言         普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在某些情况下,我们可能需要找出队列中的最大值或者最小值,例如使用一个队列保存计算机的任务,一般情况下计算机的任务都是有优先级的,我们需要在这些计算机的任务中找出优先级最高的任务先执行,执行完毕后就需要把这个任务从队列中移除。普通的队列

2021-01-10 13:52:25 772 2

空空如也

空空如也

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

TA关注的人

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