自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一次完整的http请求

1.在浏览器数输入www.baidu.com,计算机执行的全部过程(一次完整的http请求过程)整个流程如下:第一步:域名解析(要查询www.baidu.com的IP地址)浏览器首先搜索自己的DNS缓存(维护一张域名和ip地址对应的表);如果没有,则搜索操作系统中的DNS缓存(维护一张域名和ip地址对应表);如果没有,则搜索操作系统的hosts文件(window环境下维护的一张域名和i...

2019-08-23 15:54:09 212

转载 (进程间实现同步的方法)

https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/78591330(进程间实现同步的方法)

2019-08-23 10:52:00 735

原创 类加载机制

虚拟机把描述类的数据从class文件加载到内存,并且对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。类的生命周期:加载,连接(验证,准备,解析),初始化,使用,卸载。其中解析阶段的顺序不一致,她在某些情况下可以初始化之后再解析。加载阶段发生的事情:3.1 通过一个类的全限定名来获取定义此类的二进制字节流。3.2 将这个字节流所代表...

2019-08-06 17:34:14 131

原创 45题 把数组排成最小的数

题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。解题思路将整数数组转化为字符串数组字符串数组按照字典顺序排序将字符串数组拼接为新的字符串代码import java.util.*;public class Solution { publi...

2019-07-23 16:11:40 98

原创 43 整数中1出现的次数

题目描述求1到n中1出现的次数思路分析递归分析各个位置上1出现的次数(1表示个位 10表示十位 100表示百位)假设分析的是百位,有三种情况百位上数字为0,假设数字是12034,那么百位上为1的情况有00100-00199,01100-01199…11100-11199,共有12*100=1200个百位上数字为1,假设数字是12134,那么百位上为1的情况有00100-0019,0...

2019-07-20 16:15:51 95

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

题目要求HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列...

2019-07-20 11:31:48 71

原创 矩形覆盖问题

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

2019-07-04 16:25:22 102

原创 变态跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路如果第一次跳一级,剩下的就是n-1级台阶的跳法f(n-1);如果第一次跳两级,剩下的就是n-2级台阶的跳法f(n-2);如果第一次跳三级,剩下的就是n-2级台阶的跳法f(n-3);。。。。。。如果第一次跳n-1级,剩下的就是1级台阶的跳法f(1);如果第一次...

2019-07-04 15:42:48 93

原创 青蛙跳台阶问题

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。解题思路:第一种:递归第二种:循环代替递归(时间复杂度是O(n))代码1:public class Solution { public int JumpFloor(int n) { if(n<=0){ ret...

2019-07-04 15:12:05 94

原创 第十题 斐波那契序列

题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0),f(n)=f(n-1)+f(n-2)。解题思路:第一种:递归实现(缺点:时间复杂度比较高:每次都要计算她的前一项和前两项的值,有重复实现。)第二种:用循环代替递归:保存住她的前一项的值和她的前两项的值,之后直接进行计算加法。因为是从后往前走的,时间复杂度是O(n)。代码1://...

2019-07-04 14:58:12 281

原创 第40题 最小的k个数

题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路快速排序排好(一直划分小中大部分,直到划分到就剩一个数,排好序了)取前k个数代码import java.util.*;public class Solution { public ArrayList<Integer> GetLeas...

2019-07-02 17:02:15 96

原创 第39题 数组中出现次数超过一半的数字

题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。解题思路1一个数字在数组中出现次数超过一半;那么删除掉2个不相同的数字后,这个数字在新数组中出现的次数也是超过一半;不断重复上述过程,最后一个留下的数字就是目标数字n&...

2019-06-21 09:41:29 126

原创 第38题 字符串的排列

题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。解题思路1.求出所有可能出现在第一个位置的字符(就是把第一个字符和后面所有的字符交换)(可能会有重复的字符串,用treeset来保...

2019-06-20 21:21:59 141

原创 第37题 序列化和反序列化二叉树

题目描述请实现两个函数,分别用来序列化和反序列化二叉树解题思路序列化:就是把二叉树的结构转化为字符串,存到内存中;反序列化:就是把内存中的二叉树读取出来,转换为二叉树的结构;序列化:先序遍历(中左右)如果不为空,字符串是值加上_(为了反序列化的时候拆分);如果为空,字符串是#加上_反序列化:将字符串根据_拆分为字符串数组,将数组中的元素添加到队列中,如果弹出来的...

2019-06-20 17:40:26 92

原创 第36题 二叉搜索树和双向链表

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路二叉搜索树的中序遍历结果就是排好序的,所以二叉搜索树转换成排好序的双向 链表是可以实现的。把二叉搜索树划分为三个部分:左子树,根节点,右子树;(划分为三个部分)这三个部分中每个部分都是排好序的,所以我们考虑的是怎么连接的问题,也就是寻找排好序的链表中的最...

2019-06-20 16:19:15 86

原创 第35题 复杂链表的复制

题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)解题思路1.实现a-acopy-b-bcopy结构2.实现random指针的连接(原来节点的下一个是他的复制节点,根据原来节点的random指针可以找到原来节点的rand...

2019-06-20 14:19:26 121

原创 第34题 二叉树中和为某一值的路径

题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)解题思路1.先序遍历:根节点,左节点,右节点2.每遍历到一个值,判断是不是叶子节点以及是不是和等于目标值,同时满足就为路径;否则的话继续左子树递归调用以上方法,右子树递归调用以上方法...

2019-06-19 11:44:46 73

原创 第33题 二叉搜索树的后序遍历序列

题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解题思路二叉搜索树:左子树上值都比根节点的小,右子树上的值都比根节点大;左右子树也是二叉搜索树。后序遍历是左右中的顺序。找到根节点:序列的最后一个元素;比根节点小的节点是在左子树上,比根节点大的值是在右子树上;左右子树递归调用上述两步...

2019-06-19 10:26:03 151

原创 第32题 从上往下打印二叉树

题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。解题思路打印根节点0,然后打印左右节点(1和2),接着打印左节点1的左右节点(3和4),接着打印右节点2的左右节点(5和6)可以一个辅助的队列保存住先后关系(1 2 3 4 5 6)取出一个节点,他的左右孩子就入队列。终止的条件是辅助队列为空。代码public class Solution { publi...

2019-06-17 21:49:58 83

原创 第31题 栈的压入,弹出序列

题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题思路1.弹出序列的规律:如果弹出序列中要比较的元素恰好是弹入序列的栈顶元素,那么...

2019-06-17 17:47:17 96

原创 第30题 包含min函数的栈

题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。解题思路1.使用数据栈弹出到辅助栈,再从辅助栈弹回到数据栈,保存住数据栈的结构;2.数据栈在不断弹出栈顶元素的过程中,通过一个变量保存住最小值。代码public class Solution { Stack<Integer> data=new Stack...

2019-06-17 17:04:58 98

原创 第29题 顺时针打印矩阵

题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.解题思路1.确定每一圈的开始坐标和结束坐标2.定义打印的方法(打印一行,一列,反向一行,反向一列)代码impo...

2019-06-17 09:56:43 101

原创 第28题 对称二叉树

题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。解题思路就是中左右的遍历顺序和中右左的遍历顺序输出是一致的(也就是比较二叉树和它的镜像二叉树是否相等);采用递归实现。代码public class Solution { boolean isSymmetrical(TreeNode pRoot) {...

2019-06-16 17:27:00 79

原创 第27题 二叉树的镜像

题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树镜像二叉树解题思路:交换左右节点递归代码:public class Solution { public void Mirror(TreeNode root) { if(root==null){ return; } ...

2019-06-16 16:22:58 79

原创 java并发和多线程

一.java内存模型

2019-06-15 16:42:32 106

原创 第26题 树的子结构

题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解题思路递归实现二叉树的遍历在A中找和B的根节点的值一样的节点(找到根节点)R判断A中以R为根节点的子树是不是包含和树B一样的结构(左右节点值都相等)代码public class Solution {//第一步:判断有没有根节点相等的节点,有的话进行第二步;没有的话,递归调用左节点...

2019-06-12 22:27:01 84

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

题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路可以看做在有序序列中找到最小值做头节点的递归第一次:两个链表都是有序链表 找头结点(最小值) 保存住第二次:剩下的两个链表也是有序链表 找头结点(最小值) 保存住,并且与前面一个头结点建立关系代码public class Solution { public List...

2019-06-12 21:29:43 102

原创 第24题 反转链表

题目描述输入一个链表,反转链表后,输出新链表的表头。解题思路首先想到的是让结点的指针指向他的前一个结点,但是指针方向变化,就不能寻找到他的下一个结点,所以要定义一个结点保存住当前节点后面的节点;我们操作一个结点的话 需要 他的前一个结点,同时还要保存住后边的节点代码public class Solution { public ListNode ReverseList(Lis...

2019-06-12 20:50:53 84

原创 第22题 链表中倒数第k个结点

题目描述输入一个链表,输出该链表中倒数第k个结点。解题思路1第一步:计算出链表长度第二步:倒数第k个结点,就是正数第n+1-k个结点,从头开始找到时间复杂度是O(n*n),要遍历两次链表。注.1.第二步的时候是要从头开始走,注意head指针已经变了。2.找到第n+1-k个结点只需要从头结点开始走n-k步。代码public class Solution { public ...

2019-06-12 20:02:32 76

原创 排序算法

稳定性是指相等的数仍然能保证原来的相对位置1. 冒泡排序算法步骤比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复以上的步骤,最后一个元素定好了,不用进行比较了。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。ja...

2019-06-11 19:41:27 99

原创 第20题 表示数值的字符串

题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。解题思路数字表示形式:A[.[B]][E|eC]A表示整数部分(可以是正负号开头的0-9的数字)B表示小数部分(不能正负号开头的0-9...

2019-06-11 14:38:00 96

原创 第19题 正则表达式匹配

题目描述请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配代码(用递归实现每一位上的比较)public class Solution { publi...

2019-06-11 11:10:26 99

原创 第18题 删除链表的节点 删除链表中重复的节点 剑指offer

题目要求在O(1)的时间类删除链表节点(假设要删除的节点一定在链表中,否则的话要遍历判断要删除的节点是否在链表中,时间复杂度是O(n))解题思路1目标节点target,前一个结点before,后一个结点after:从头结点开始遍历,找到before;让before指向after;因为需要遍历,时间复杂度是O(n),不符合题意。解题思路2目标节点target,后一个结点after,a...

2019-06-11 09:14:12 105

原创 第17题 打印从1到最大的n位数

题目:打印从1到最大的n位数解题思路1:1.先求出最大的n位数,然后用一个循环逐个打印代码:public static void print1ToMaxOfNDigitals(int n) { int number=1; //边界值 int i=0; //用来和n(位数作比较),确定是10的几次方 //确定打印的边界值 n=1,...

2019-06-10 17:06:37 110

原创 16 数值的整数次方 循环 递归

题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。解题思路考虑0的负数次幂,0不能做分母考虑幂为正数,负数和0的情况代码1(循环)public static double PowerWithUnsignedExponent(double base,int exponent) throws Exception { ...

2019-06-08 15:17:13 130

原创 剑指offer 第十五题 位运算 二进制中1的个数

题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路分析第一种思路:二进制表示和1与运算,结果为1,说明最右边位置为1;右移判断各个位置是否为1缺点:如果是负数的情况下,符号位是1,左边补得一直为1,这样最终数字会变成0xFFFFFFFF,从而陷入死循环第二种思路:二进制表示不变,让1不断左移,相与,来判断二进制表示的各个位置是否为1缺点:如果数字为...

2019-06-06 14:41:04 175

原创 剑指offer第14题 动态规划 贪婪算法 剪绳子

动态规划把大问题分解为小问题,每个小问题有最优解,用小问题的最优解可以组合为大问题的最优解。适用情况:最优解问题整体问题的最优解依赖子问题的最优解大问题分解为小问题,小问题还有相互重叠的更小的子问题从上而下分析问题,从下往上求解问题贪婪算法每一步都可以做出一个贪婪的选择得到最优解题目长度为n的绳子切分为m段(至少要切一刀)使得每段长度的乘积最大(m,n均为整数),并...

2019-06-05 18:43:23 155

原创 剑指offer12 13 回溯法 矩阵中路径 机器人运动范围

回溯法思想回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法题目一:矩阵中的路径请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格...

2019-06-05 15:56:56 170

原创 集合part

1.java中的集合框架2.介绍list和set以及map总的来说:List 元素是有序的、可重复;Set(集合) 元素无序的、不可重复;Map不是collection的子接口或者实现类,Map是一个接口,存放的是键值对。分层介绍:1.List 接口中常用类Vector :线程安全,但速度慢,已被 ArrayList 替代。底层数据结构是数组ArrayList :线程不安全,查询...

2019-06-04 22:14:46 187

原创 剑指offer 第53题 数字在排序数组中出现的次数(有序数组二分查找和递归方法)

题目描述统计一个数字在排序数组中出现的次数。考查知识点二分查找 递归解题思路1.排序数组用二分查找法;2.找到目标值后,如果不是第一个目标值,找到第一个目标值(递归 二分查找);3.找到目标值后,如果不是最后一个目标值,找到最后一个目标值(递归 二分查找);4.找到第一个的坐标和最后一个的坐标,得到个数。代码示例//1.找到第一个目标值坐标 public int getNum...

2019-06-04 15:16:46 414

空空如也

空空如也

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

TA关注的人

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