自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 剑指offer刷题记录-

一:题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。二:问题分析BST的后序序列的合法序列是,对于一个序列S,最后一个元素是x (也就是根),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前一段(左子树)小于x,后一段(右子树)大于x,且这两段(子树)都是合法的后序序列。完美...

2020-02-04 21:20:00 159

原创 剑指offer刷题记录-从上往下打印二叉树

一:题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。二:问题分析用arraylist模拟一个队列来存储相应的TreeNode三:问题求解import java.util.ArrayList;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode ri...

2020-02-04 21:18:26 132

原创 剑指offer刷题记录-栈的压入,弹出序列

一:题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)二:问题分析借用一个辅助的栈,遍历压栈顺序,先讲第一个放入栈中,这里是1,...

2020-02-04 21:16:17 161

原创 剑指offer刷题记录-包含min函数的栈

一:题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。二:问题分析使用两个 栈,一个数据栈,一个 最小栈例如:数据栈中:3 782 1 最小栈中:3 3 3 2 1最小栈中存放当前 栈中对应长度元素的最小值三:问题求解import java.util.Stack;publ...

2020-02-04 10:26:49 173

原创 剑指offer刷题记录-顺时针打印矩阵

一:题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.二:问题分析基本思路是设置四个边界,然后按照上,右,下,左的顺序遍历矩阵数组。链接:定义四个变量代表范...

2020-01-21 21:40:47 132

原创 剑指offer刷题记录-二叉树的镜像

一:题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5...

2020-01-21 21:17:07 115

原创 剑指offer刷题记录-树的子结构

一:问题描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)二:问题分析使用递归实现。具体注意事项见下一部分代码注释三:问题求解/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; p...

2020-01-20 00:07:24 90

原创 剑指offer刷题记录-合并两个排序的链表

一:题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。二:问题分析思路类似于归并排序的归并merge步骤三:问题求解/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.va...

2020-01-18 10:04:01 107

原创 剑指offer刷题记录-反转链表

一:题目描述输入一个链表,反转链表后,输出新链表的表头。二:问题分析使用额外的初始值为null的指针pre和开始指向头部的指针prepre。然后使用类似于值交换的思路,进行节点交换。三:问题求解public class Solution { public ListNode ReverseList(ListNode head) { ListNode pr...

2020-01-16 23:27:35 110

原创 剑指offer刷题记录-链表中倒数第k个节点

一:题目描述输入一个链表,输出该链表中倒数第k个结点。二:问题分析典型的双指针问题,需要特别注意的有两点:1)哑节点dummy的设置,防止一些特殊情况的出现2)在进行双指针运动之前先测量数组长度,如果小于k,直接返回null三:问题求解/*public class ListNode { int val; ListNode next = null;...

2020-01-16 23:19:50 78

原创 剑指offer刷题记录-调整数组顺序使奇数位于偶数前面

一:问题描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。二:问题分析基本思路就是从左往右先找出第一个奇数,然后备份,将该奇数前面的所有偶数向后移动一位,将备份的奇数插入到第一个位置,依次类推三:问题求解public class Solution { ...

2020-01-15 22:22:08 124

原创 BIO,NIO与AIO的区别

要说清这几种IO的区别,首先必须辨析清楚同步与异步,阻塞与非阻塞的区别。一:同步与异步同步和异步关注的是消息通信机制(synchronous communication/ asynchronous communication)所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由*调用者*主动等待这个*调用*...

2020-01-15 21:15:58 113

原创 剑指offer刷题记录-重建二叉树

一:题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。二:问题分析根据中序遍历和前序遍历可以确定二叉树,具体过程为:根据前序序列第一个结点确定根结点 根据根结点在中序序列中的位置分割出左右...

2020-01-12 20:24:07 123

原创 LeetCode刷题日记之旋转链表

一:问题描述旋转链表给定一个链表,旋转链表,将链表每个节点向右移动k个位置,其中k是非负数。示例1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL...

2020-01-10 22:36:38 124

原创 剑指offer刷题记录-二进制中1的个数

一:题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。二:问题分析思路一:常规解法,取一个flag=1,让flag与该二进数进行与(&)操作,若结果为flag,则统计次数加一,每进行一次操作,flag左移一位,直到flag为0。思路二:如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1...

2020-01-10 21:41:57 126

原创 LeetCode刷题日记之两数相加

一:问题描述给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -...

2020-01-09 21:51:24 127

原创 剑指offer刷题记录-矩形覆盖

一:题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?二:问题分析使用迭代法,首先思考这个问题,涂掉矩形最后一级时是用什么方法完成的?n = 1 的时候 只能横着覆盖,一种 n = 2 的时候 可以横着和竖着覆盖,两种 n = 3 的时候 第三级横着覆盖,用了一级,剩下 n = ...

2020-01-09 21:30:36 111

原创 剑指offer刷题记录-变态跳台阶

一:题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。二:问题分析易知 f(n)=f(n-1)+f(n-2)+……f(1)f(n-1)=f(n-2)+……f(1)两式相减得f(n)=2f(n-1)三:问题求解public class Solution { public int JumpFloorI...

2020-01-09 21:14:27 88

原创 LeetCode刷题日记之合并两个有序链表

一:问题描述合并两个有序链表将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4二:问题分析本题使用到了归并排序中的归并思想。本题格外需要注意的是,我们要使用一个哑节点dummy始终指向链表...

2020-01-08 21:33:33 187

原创 剑指offer刷题记录-跳台阶

一:问题描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。二:问题分析对于本题,前提只有 一次 1阶或者2阶的跳法。a.如果两种跳法,1阶或者2阶,那么假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法是f(n-1);b.假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2)c.由a\b假...

2020-01-08 21:19:13 159

原创 剑指offer刷题记录-斐波那契数列

一:问题描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39二:问题求解思路一:非递归实现Java代码如下:public class Solution { public int Fibonacci(int n) { int prepreNode=0; int ...

2020-01-05 20:12:21 89

原创 剑指offer刷题记录-旋转数组的最小数字

一:问题描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。二:问题求解思路一:暴力解法,由于数组是非递减的,所以用两个指针p1和p2,找到的第一个arr[p...

2020-01-03 21:08:28 128

原创 剑指offer刷题记录-用两个栈实现队列

一:问题描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。二:问题求解java代码具体实现:import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<In...

2020-01-03 20:02:23 107

原创 剑指offer刷题记录-从尾到头打印链表

一:问题描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。二:问题求解思路1:使用ArrayList重载的add(int index,Object obj)方法Java代码实现如下:import java.util.*;public class Solution { public ArrayList<Integer> prin...

2020-01-02 18:03:37 272 1

原创 剑指offer刷题记录-替换空格

一:问题描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。二:问题求解解法一:用String的replace()方法public class Solution { public String replaceSpace(StringBuffer str) { ...

2020-01-02 17:51:29 124 1

原创 剑指offer刷题记录-二维数组中的查找

一:问题描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。二:题目求解解法一:暴力解法,遍历每一行每一列进行比较,时间复杂度mxn(m为行数,n为列数)具体实现略解法二:用二维数组由上到下,由左到右递增的规律,那么选取左...

2020-01-02 17:24:06 134 1

转载 DNS域名解析全过程

原文链接:https://blog.csdn.net/m0_37812513/article/details/78775629当一个用户在地址栏输入www.taobao.com时,DNS解析有大致十个过程,如下:1. 浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束。同时域名被缓存的时间也可通过TTL属性来设置。2. 如果浏览器缓存中没有(专业点叫还没命...

2020-01-01 20:50:31 116

原创 冒泡排序以及常见的三种优化方案

一:传统的冒泡排序图解:代码实现:import org.junit.Test;import java.util.Arrays;public class BubbleSort { int[] nums={55,23,97,64,56,56,12,87,54,10}; public void bubbleSort(int[] nums){ int ...

2019-12-27 22:36:31 1049 1

原创 Leetcode刷题日记之回文链表

一:问题描述回文链表请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用O(n) 时间复杂度和 O(1) 空间复杂度解决此题?二:问题分析首先解决这个问题的第一步,一定需要使用到快慢指针fast和slow,找到链表中点,并在前进过程中将...

2019-12-24 22:18:08 134

转载 Http协议请求报文格式和响应报文格式

请求报文格式HTTP 请求报文由请求行、请求头部、空行 和 请求包体 4 个部分组成,如下图所示:请求行:请求行由方法字段、URL 字段 和HTTP 协议版本字段 3 个部分组成,他们之间使用空格隔开。常用的 HTTP 请求方法有 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT;请求头部:典型的请求头有:  ● User-Age...

2019-12-21 13:17:14 672

原创 GET和POST两种基本请求方法的区别

标准答案: GET在浏览器回退时是无害的,而POST会再次提交请求。 GET产生的URL地址可以被Bookmark,而POST不可以。 GET请求会被浏览器主动cache,而POST不会,除非手动设置。 GET请求只能进行url编码,而POST支持多种编码方式。 GET请求参数会被完整保留在浏览器历史记录里,而POST中...

2019-12-21 13:05:15 113

原创 Leetcode刷题日记之反转链表

一:问题描述反转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL二:问题分析迭代法假设存在链表 1 → 2 → 3 → Ø,我们想要把它改成 Ø ← 1 ← 2 ← 3。在遍历列表时,将当前节点的 next 指针改为指向前一个元素。由...

2019-12-19 21:34:23 132

原创 Leetcode刷题日记之删除链表的倒数第N个节点

一:问题描述删除链表的倒数第N个节点给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的n保证是有效的。二:问题分析基本思路是使用两个快慢指针,让快指针先走n+...

2019-12-19 20:46:34 95

转载 DFS,回溯与递归的关系

首先DFS叫做深度优先搜索,既然是搜索,必然会有个起点,也会有个终点。既然是深度优先,和BFS相比,DFS就是先一次性搜到底,再退一步,再走另一条路,再一次搜到底。想象一下你在迷宫,一个粗暴的方法就是把每条路径是试一遍。那么DFS过程中,你要退一步,就必然需要保存你走过每个点的所有信息,而且是又先后顺序的,符合后进先出的规则,那么就需要用一个栈,而递归过程中函数调用会自动产生栈帧,当你的栈...

2019-12-19 11:23:54 354

原创 Leetcode刷题日记之相交链表

一:问题描述编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。二:问题分析设PA指针从A链表从头遍历到尾,然后再从B的头部开始遍历到A和B相交节点的距离为DISTANCE(PA);设PB指针从B链表从头遍历到尾,然后再从A的头部开始遍历到A和B相交节点的距离为DISTANCE(PB);则有DISTANCE(PA)==DISTANC...

2019-12-17 21:47:29 100

转载 Leetcode刷题日记之环形链表II

一:问题描述环形链表 II给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果pos是-1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail co...

2019-12-17 21:21:29 200

原创 Leetcode刷题日记之环形链表

一:问题描述环形链表给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果pos是-1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例2:输入:head...

2019-12-17 20:33:51 102

转载 事务的ACID属性

原文链接:https://en.wikipedia.org/wiki/ACID在计算机科学中,ACID(Atomicity 原子性、Consistency 一致性、Isolation 隔离性、Durability 持久性)是一系列属性。这些属性保证了数据库事物的可靠。在数据库中,对数据的一系列操作在逻辑上可以看成一个整体的操作,这个整体的操作就叫事物。例如,银行从一个账户往另外一个账户...

2019-12-16 16:56:47 121

原创 LeetCode刷题日记之旋转数组

一:问题描述旋转数组给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例2:输...

2019-12-13 21:44:59 123

原创 LeetCode刷题日记之长度最小的子数组

一:问题描述给定一个含有n个正整数的数组和一个正整数s ,找出该数组中满足其和≥ s的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。示例:输入: s = 7, nums = [2,3,1,2,4,3]输出: 2解释: 子数组[4,3]是该条件下的长度最小的连续子数组。进阶:如果你已经完成了O(n) 时间复杂度的解法, 请尝试O(nl...

2019-12-12 21:48:37 133

空空如也

空空如也

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

TA关注的人

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