自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 剑指offer系列--16、合并两个有序的链表

16、合并两个有序的链表一、题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。二、解答解法1:两个指针指向两个链表,随着指针的移动,移除链表上节点,组建新的链表。 // 通过指针操作,合成新的链表 public ListNode Merge(ListNode list1,ListNode list2) { /* * 判空操作 */ if(list1==null){ return lis

2021-01-29 10:25:49 87

原创 剑指offer系列--15、反转链表

15、反转链表一、题目描述输入一个链表,反转链表后,输出新链表的表头。二、解法解法1:借助数据结构,数组,栈来反转链表。 /** * 思路1:借助数组,反转链表 * */ public ListNode ReverseList(ListNode head) { if(head==null){ return null; } ListNode p =head; ArrayList<ListNode> list = n

2021-01-20 12:37:51 89

原创 剑指offer系列--14.链表中倒数第k个结点

14.链表中倒数第k个结点题目描述输入一个链表,输出该链表中倒数第k个结点。思路:1、借助栈、或数组 public ListNode FindKthToTail1(ListNode head,int k) { if(head==null||k<1){ return null; } Stack<ListNode> stack=new Stack<>(); ListNode p =head; int

2021-01-18 09:49:27 127 1

原创 剑指offer系列--13、调整数组顺序使奇数位于偶数前面

13、调整数组顺序使奇数位于偶数前面题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路:1:借助辅助两个数组,时间复杂度O(2n),空间复杂度O(n) // 思路1 public void reOrderArray1(int [] array) { if(array==null){ return; } ArrayList<Integer&

2021-01-10 12:12:34 155 5

原创 剑指offer系列--12、数值的整数次方

12、数值的整数次方题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0解法1:内置函数public int power(base,exponent){ return Math.pow(base,exponent);}解法2:暴力法 // 解法2,暴力求解 public double Power1(double base,int exponent){ if

2021-01-04 14:46:00 113

原创 剑指offer系列--11、二进制表示中1的个数

11、二进制表示中1的个数题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解法1、除二取余法由于题目没有提供,是多少位的补码。所以我这种方法怎么算,测试案例都过不了。 public int NumberOf1(int n) { ArrayList<Integer> list=new ArrayList<>(); ArrayList<Long> list1=new ArrayList<>();

2020-12-22 09:52:31 85

原创 剑指offer系列--10、矩形覆盖

10、矩形覆盖题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:思路:1、递归 public int RectCover(int target) { if(target<=0){ return 0; } if(target==1||target==2){ return target; }

2020-12-15 10:26:18 58

原创 剑指offer系列--9、变态跳台阶

9、变态跳台阶题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:1、递归 public int JumpFloorII(int target) { if(target<=0){ return 0; } if(target==1||target==2){ return target; } int sum=1; for(int i=1

2020-12-08 14:47:42 52

原创 剑指offer系列--8、跳台阶

8、跳台阶题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。解决思路:1、递归 public int JumpFloor(int target) { if(target==0||target==1||target==2){ return target; } return JumpFloor(target-1)+JumpFloor(target-2); } public in

2020-12-01 09:17:42 65

原创 剑指offer系列--7、斐波那契数列

7、斐波那契数列题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n<=39解题思路:一、递归时间复杂度:O(2^n)空间复杂度:O(1) public int Fibonacci(int n) { if(n<0){ return -1; } if(n==0||n==1){ return n; } return Fibonacci(n-2)+Fibonacci(n-1)

2020-11-24 11:06:50 76

原创 剑指offer系列--6.旋转数组的最小数字

题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解决思路:一、暴力法直接寻找遍历数组,直到找到下降的地方二、利用Arrays.sort()排序三、利用优先队列PriorityQueue默认结构为最小堆,弹出来的第一个数就是整个数组的最小值。queue.

2020-11-17 11:14:04 82

原创 剑指offer系列--5、用两个栈实现队列

题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解决思路:Stack1负责入栈Stack2负责出栈push ,pop方法常规解法就是这样,网上没见到其他解法public class Main5 { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>();

2020-11-10 09:45:57 85

原创 剑指offer系列--4、重建二叉树

题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解决思路:网上大多只给出一种思路,就是递归一、递归根据前序序列找出第一个结点确定根节点根节点在中序序列中的位置分割出左右两个子序列对左子树和右子树分别递归使用同样的方法继续分解 public TreeNode reConstructBinaryT

2020-11-06 11:23:06 61

原创 剑指offer系列--3.输入一个链表,按链表从尾到头的顺序返回一个ArrayList。

3.输入一个链表,按链表从尾到头的顺序返回一个ArrayList。解决方案:一、递归写法时间复杂度:O(n) // 递归写法,类似于二叉树的后序遍历 public ArrayList<Integer> printListFromTailToHead2(ListNode listNode) { ArrayList<Integer> rs =new ArrayList<>(); fuzhu(listNode, rs); return rs;

2020-10-29 19:27:10 64

原创 剑指offer系列--53、表示数值的字符串

53、表示数值的字符串一、题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。二、解题思路1、自己写的,烂的一批分类讨论首位允许的字符+,-,数字中间位允许的字符数字e,Ee后,-,数字.末尾允许的字符数字 public boolean isNu

2020-10-20 16:51:57 68

原创 剑指offer系列--54、字符串流中第一个不重复的字符

54、字符串流中第一个不重复的字符一、题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。二、解题思路1、最先想到的思路利用map记录出现次数第一次遍历记录每个字符出现的次数第二次遍历找出目标字符2、尝试更好的思路不借助数据结构怎么整?排序–>找出出现一次的字符—>去源字符串中找出目标字符或者两层循环

2020-10-17 13:05:20 102

原创 剑指offer系列--2.字符串操作,将空格替换为其他字符

2.字符串操作,将空格替换为其他字符一、问题描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。二、解决方案1、使用java API,replace方法 public String replaceSpace1(StringBuffer str) { if(str==null){ return null; } /** * replace方法的参数 * -

2020-10-11 20:11:26 113

原创 剑指offer系列--55、链表中环的入口节点

一、题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。二、解题思路1、利用set遍历链表,往set中添加节点新的加入setset中已存在,输出。2、双指针slow=fast=headerslow+1,fast+2不相遇,无环,相遇有环fast=head,fast+1,slow+1 public ListNode EntryNodeOfLoop(ListNode pHead){ if(pHead==null){ retur

2020-10-07 17:58:52 89

原创 剑指offer系列--56、删除链表中重复的节点

56、删除链表中重复的节点一、题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5二、解题思路1、利用hashMap略2、双指针操作cur:当前指针p:初始cur+1,p往后走,直到遇到不等的节点函数移除[cur,p)之间的节点cur=p public ListNode deleteDuplicat

2020-09-22 20:51:34 63

原创 剑指offer系列--1. 从二维数组查找某个数

1. 从二维数组查找某个数一、问题描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。二、解决方案1、针对每一行进行二分查找实现针对一维数组的二分查找方法获取二维数组行数,按每行为单位执行二分查找方法时间复杂度:O(M*logN) public boolean Find(int target, int [][] array) { if(arr

2020-09-15 16:52:38 97

原创 剑指offer系列--57、二叉树的下一个节点

57、二叉树的下一个节点一、题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。二、解题思路1、最傻的方法递归中序遍历,然后找出目标节点2、更好的方法给了父指针,要充分利用给出的条件当前节点与下一节点的关系当前节点有右子树,右子树的最左节点即是下一个节点当前节点没有右子树,向上查找,用cur指向向上查找的当前节点,若当前节点作为左孩子,返回cur的父节点,cur作为右孩子,继续向上查找。

2020-09-09 10:46:23 313

原创 AlertManager配置参数解析

resolve_timeout(5m)定义了当AlertManager持续多长时间未接收到告警后标记告警状态为resolved(已解决)。该参数的定义可能会影响到告警恢复通知的接收时间。默认为5M。repeat_interval如果警报已经成功发送通知, 如果想设置再次发送该告警通知之前要等待的时间,则可以通过repeat_interval参数进行设置。# How long to wait before sending a notification again if it has alre

2020-09-04 16:48:10 2654

原创 剑指offer系列--51、构建乘积数组

51、构建乘积数组一、题目描述给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。二、解题思路1、最先想到的思路遍历b数组,一个一个的构建public in

2020-08-27 20:17:19 84

原创 剑指offer系列--38、二叉树的深度

二叉树的深度一、题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。二、思路二叉树相关问题常规套路–递归 /** * 求树的深度,递归实现 */ public int TreeDepth(TreeNode root) { if(root==null){ return 0; } return Math.max(TreeDepth(ro

2020-08-18 17:15:58 76

原创 剑指offer系列--33、丑数

33、丑数一、题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。 例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。二、解题思路1、我想的,不好的思路给出判断一个数是否是丑数的逻辑循环除2,3,5遍历得出丑数2、从1开始逐步构建丑数- 丑数结构2^x*3^y*5^z- 用三个指针p2,p3,p5记录上次计算丑数的位置--p2:上一个,乘以2得到的丑数--p3:上一个,乘以3得到的丑数

2020-08-12 15:52:12 88

原创 剑指offer系列--34、第一个只出现一次的字符

34、第一个只出现一次的字符一、题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)二、解题思路肯定要遍历字符串所有字符如何判断当前字符是否已经出现过?这就需要对之前遍历的结果进行记录?所以本题的重点就是用什么数据结构去记录?HashMap:key无序,不能遍历统计结果map。可以遍历原字符串,然后去map中去找。TreeMap:key有序,但是默认是自然

2020-08-05 17:49:23 91

原创 go语言-defer(延迟执行)

defer语句会将其后面跟随的语句进行延迟处理在defer归属的函数即将返回时,将延迟处理的语句按defer的逆序进行执行。defer类似于java的finally语句块,一般用于释放某些已分配的资源。示例1:多个延迟执行语句的处理顺序func main(){ fmt.Println("1") defer fmt.Println("4") defer fmt.Println("3") fmt.Println("2")}###输出:1,2,3,4// 5.

2020-08-03 10:50:24 149

原创 go语言-函数的声明

一、概述go是编译型语言,声明顺序无关紧要,鉴于可读性,最好把main()函数写在文件的前面。go中拥有三种类型的函数:普通的带有名字的函数匿名函数或者lambda函数方法???二、普通函数声明1、声明格式##函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体func name(参数列表)(返回值列表){ 函数体}形式参数:作为局部变量,其值由参数调用者提供返回值列表:描述了函数返回值的变量名以及类型,如果函数返回一个无名变量或者没有返回值,返

2020-07-28 10:20:45 372

原创 go语言-接口的声明

一、概述接口是一种类型,它规定了变量有哪些方法go接口是满足隐式实现的(不用显式声明实现关系),即不用写implements声明接口约束变量的行为,不约束属性.对于这样的场景,我不管变量的类型,只关心能调用它的哪些行为当你看到一个接口类型的值时,你不知道它是什么,唯一知道的是通过它的方法能做什么?接口引入示例:type cat struct{}type dog struct{}func (c cat) speak(){ fmt.Println("瞄")}func (d dog

2020-07-28 10:20:09 337

原创 Go语言-常量

一、常量声明常量的声明方式类似于变量,只不过常量在声明的时候需要初始化。常量是在编译时被创建的,即使定义在函数内部也是如此,并且只能是布尔类型、数字型、字符串型。常量的值必须在编译时就能够确定,可以涉及计算过程,但用于计算的值必须能在编译期间就能获得。显示类型定义const c string ="abc"隐式类型定义const b ="abc"批量声明const( e=2.7444 pi=2234)##const( a=1 b c=2

2020-07-22 18:04:23 197

原创 Go语言-变量的声明、初始化等

一、变量的声明1、概述变量基本类型--bool--string--int,int8,int16,int32,int64--uint,uint8,uint16,uint32,uint64,uintptr--byte // uint8的别名--rune // int32的别名,代表一个Unicode码--float32、float64--complex64、complex128变量的特性--当一个变量被声明后,系统自动赋类型零值,int为0,float为0.0,bool为false

2020-07-22 18:02:59 558

原创 亚子哥刷题之路-N皇后问题

一、问题描述N皇后问题是指在N*N的棋盘上要摆N个皇后,要求任何两个皇后不同行、不同列,也不在同一条斜线上。给定一个整数n,返回n皇后的摆法有多少种?举例:n=1,返回1n=2或3,无论怎么摆都不行,返回0.n=8,返回92二、解题思路1、如果在(i,j)位置(第i行第j列)放置一个皇后,接下来哪些位置不能放置皇后呢?整个第i行的位置都不能放置整个第j列的位置都不能放置如果位置(a,b)满足|a-i|==|b-j|,说明(a,b)与(i,j)处在同一条斜线上,也不能放置。2、思路

2020-07-16 20:15:04 303

原创 Redis字符串

字符串类型的值实际可以是字符串(简单字符串、JSON、XML)、数字(整数、浮点数)、二进制(图片、音频、视频)值最大不能超过512MB一、命令1、常用命令设置值set key value [ex seconds] [px milliseconds] [nx|xx]set命令选项:--ex seconds:为键设置秒级过期时间--px milliseconds:为键设置毫秒级过期时间--nx :键必须不存在,才可以设置成功。--xx :键必须存在,才可以设置成功,用于更新。s.

2020-07-15 18:00:05 110

原创 Redis学习笔记之Redis数据结构与内部编码、单线程架构

一、Redis数据结构与内部编码1、Redis数据结构有哪些?StringHashlistsetzset等等2、数据结构与内部编码的关系数据结构是用户能接触的接口内部编码是数据结构的内部实现每种数据结构都有两种及以上的内部编码多种内部编码实现可以在不同的场景下发挥各自的优势二、Redis的单线程架构redis是单线程来处理命令的一条命令从客户端到服务端不会立刻被执行,所有命令都会进入一个队列中,然后逐个被执行。为什么单线程还能那么快?纯内存访问非阻塞IO

2020-07-12 14:30:40 171

原创 Redis学习笔记之Redis简介、特性、应用场景

一、简介键值对NoSQL数据库多种key类型基于内存,可持久化二、特性速度快数据在内存中基于c语言实现单线程架构,没有线程竞争问题基于键值对的数据结构服务器key的数据结构类型丰富丰富的功能键过期发布订阅支持Lua脚本事务功能流水线功能简单稳定客户端语言多持久化主从复制高可用和分布式三、使用场景缓存排行榜系统:set,zset计数器消息队列:和专业消息队列比不太行,可满足基本功能四、安装使用redis-server:启

2020-07-12 14:16:57 150

原创 亚子哥刷题之路-最长公共子序列长度

一、题目描述给定两个字符串s和t,返回这两个字符串的最长公共子序列的长度。若两个字符串没有公共子序列,则返回0。一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符后组成的新字符串。例如“ace”是“abcde”的子序列。二、定义状态方程dp[i][j]含义:s[0…i)和t[0…j)的最长公共子序列长度。注:dp[i][j]也可以定义为s[0…i]和t[0…j]的最长公共子序列长度,两种定义方式边界值的处理方式不同。三、状态转移方程只看一

2020-07-02 22:04:30 349 1

原创 Markdown基本语法总结

一、标题Markdown支持六级标题示例:#一级标题##二级标题###三级标题####四级标题#####五级标题######六级标题二、字体斜体:要加斜的文字左右用一个*包起来加粗:要加粗的文字左右用两个*包起来斜体加粗:左右用三个*包起来删除线:要加删除线的文件左右用两个~包起来示例:**加粗***斜体****加粗斜体***~~删除线~~效果如下:...

2019-06-18 22:35:04 227

Spring Boot

基于Spring Boot 的图书管理系统。整合了MyBatis、mysql、SpringMVC、Log4j2)、模拟了RESTful端点的暴露与发现、模拟了Spring batch的使用

2018-12-06

空空如也

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

TA关注的人

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