自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 volatile关键字在JAVA中的特性

关键字volatile是JVM提供的最轻量级的同步机制,JVM内存模型对volatile专门定义了一些特殊的访问规则。当变量被volatile关键字修饰后它在Java中具有以下两种特性:1.保证此变量对所有线程的可见性这里的"可见性"解释为 : 当一条线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的。普通变量做不到这一点,普通变量的值在线程间传递均需要通过主内存来完成。vola...

2019-05-17 17:16:49 359

原创 剑指offer-36:二叉搜索树与双向链表

输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。转换过程中不能创建任何新的结点,只能调整树中结点指针的指向。本文有关二叉搜索树结点以及创建二叉搜索树的代码如下:typedef int DataType;typedef struct BSTreeNode{ DataType key; struct BSTreeNode *left; struct BSTreeNode ...

2019-05-09 18:15:02 208

原创 详解Java中String类

String类作为Java中三大特殊类之一,一个很重要的类,项目开发中基本都会用到。实例化方式1.直接赋值String str = "Hello World" ; // str是一个对象,那么"Hello Worldt" 保存在堆内存中System.out.println(str) ;这种方法最为常用。2.通过构造方法赋值String str = new String("Hello...

2019-05-08 21:29:18 293

原创 剑指offer-37:序列化二叉树

实现两个函数,分别用来序列化和反序列化二叉树。有关二叉树的结点结构体定义如下:typedef int DataType;typedef struct BSTreeNode{ DataType data; struct BSTreeNode *left; struct BSTreeNode *right;} BSTreeNode;BSTreeNode *CreateNode(...

2019-05-08 14:34:31 184

原创 剑指offer-67:将字符串转换为整数

将一个字符串转换成一个整数,不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。输入一个字符串,包括数字字母符号,可以为空。如果输入字符串为空直接返回0。若不为空,通过String类的toCharArray()将字符串转换为字符数组,然后从头遍历整个字符数组(一般默认为整数,如果第一个字符为‘-’,则说明为负数,最终转换为负数即可)。如果字符是数字,则通过 sum ...

2019-05-08 14:05:32 176

原创 剑指offer-54:二叉搜索树的第K大结点

给定一棵二叉搜索树,请找出其中第k大的结点。本文有关二叉搜索树节点结构体的定义和二叉搜索树创建算法如下:、#include<stdio.h>#include<stdlib.h>typedef int DataType;typedef struct BSTreeNode{ DataType key; struct BSTreeNode *left; str...

2019-05-05 20:47:44 102

原创 剑指offer-13:机器人的运动范围

地上有一个m行n列的方格。一个机器人从坐标(0,0)的格子开始移动,它每次可以向左,右,上,下移动一格子,单不能进入坐标位数之和大于k的格子,最终机器人能够到达多少个格子。这个方格可以看成m x n的矩阵。除矩阵边界上的格子外,其它格子都有4个相邻的格子。利用回溯法,机器人从坐标(0,0)开始移动,当它进入坐标为(i,j)的格子时,通过检查坐标的位数和来判断机器人是否能够进入。如果机器人能够进入...

2019-05-04 17:31:04 223

原创 剑指offer-28:对称二叉树

如果一颗二叉树和它的镜像一样,那么它是对称的。实现一个函数,用来判断一颗二叉树是不是对称的。首先定义一种前序遍对称的算法,先遍历一棵二叉树的根结点,再遍历它的右子结点,最后遍历它的左子结点。以下面两棵树为例:对于树A,可以图中看出它明显对称。它的前序遍历序列为{1,2,3,4,2,4,3},前序对称遍历序列为{1,2,3,4,2,4,3},可以发现它的前序序列和对称序列一样。对于树B,可...

2019-05-04 16:03:32 185

原创 剑指offer-47:礼物的最大价值

在一个m x n的棋盘的每一个字都放有一个礼物,每个礼物都有一定的价值(价值大于0)。可以从棋盘的左上角开始拿格子里的礼物,并每次向左或向下移动一格,直到到达棋盘的右下角。给定一个棋盘及棋盘上面的礼物,计算出最多能拿到多少价值的礼物。首先定义一个函数f(i,j)表示到达坐标为(i,j)时能拿到礼物的总和的最大值。要想到达坐标为的格子有两条路径:通过格子(i-1,j)或者(i,j-1)。所以f(i...

2019-05-03 20:15:37 351

原创 剑指offer-14:剪绳子

给定一根长度为n的绳子,把绳子剪成m段,每段绳子的长度都记为k[0],k[1],…,k[m]。请问k[0] x k[1] x…x k[m]可能的最大乘积是多少?定义f(n)为把长度为n的绳子剪成若干段后各段长度乘积的最大值。按照从下而上的顺序进行计算,先得到f(2)和f(3),再得到f(4)和f(5),最后得到f(n)。当绳子的长度为2时,只可能剪成长度为1的两段,即f(2)=1。当绳子的长度...

2019-05-03 18:06:07 240

原创 剑指offer-8:二叉树的下一个结点

给定一颗二叉树和其中一个结点,如何找出中序遍历序列的下一个结点?本文中有关二叉树结点结构体以及其它相关函数接口定义如下:#include<stdio.h>#include<stdlib.h>#include<assert.h>typedef int DataType;typedef struct BSTreeNode{ DataType ...

2019-05-03 17:33:24 111

原创 剑指offer-22:表示数值得字符串

实现一个函数用来判断字符串是否是表示数值,其中包含整数和小数表示数值的字符串遵循模式A[.[B]][e|EC]或者.B[e|EC],其中A为数值的整数部分,B紧跟着小数点为数值的小数部分,C紧跟着’e’或‘E’为数值的指数部分。一个数可以没有整数部分,但是不能没有小数部分。对于一个字符串,从头开始扫描,首先扫描表示数字的整数部分,如果遇到小数点’.’,则开始扫描整个数的小数部分B。如果遇到’e...

2019-05-03 17:02:40 127

原创 剑指offer-66:构建乘积数组

给定一个数组A{0,1,…n-1},构建一个数组 B{0,11,…n-1},其中B中的元素B[i]=A[0]xA[1]x…A[i-1]xA[i+1]x…A[n-1]。不能a使用除法。对于这道题,由于不能使用除法,可以把B[i]=A[0]xA[1]x…A[i-1]xA[i+1]x…A[n-1]看成是A[0]xA[1]x…A[i-1]和A[i+1]x…A[n-1]两部分的乘积。可以定义C[i]=A[...

2019-05-03 16:46:01 149

原创 剑指offer-19:正则表达式匹配

实现一个函数用来匹配包含‘. ’和‘* ’的正则表达式。模式中的字符‘. ’表示任意一个字符,而‘* ’表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。每次从字符串里面拿出一个字符和模式中的字符去匹配,直到遇到‘\0’为止:1.如果模式中字符是‘. ’时,‘. ’可以和字符串中任何字符匹配。2.对于’*'匹配,问题比较复杂一些,有两种方式:(1)匹...

2019-04-29 21:07:57 119

原创 剑指offer-23:链表中环的入口结点

如果一个离岸边表中包含环,如何找出环的入口结点?本文有关链表结点结构体定义以及其它方法接口定义如下:#include<stdio.h>#include<stdlib.h>#include<assert.h>typedef int DataType;typedef struct ListNode{ DataType data; struct ...

2019-04-29 19:29:59 111

原创 synchronized处理同步问题

JAVA中synchronized关键字用来处理多线程的同步问题,解决每一个线程对象轮番强占资源带来的问题。它最大的特征就是在同一时刻只有一个线程能够获得对象的监视器(monitor),从而进入到同步代码块或者同步方法之中,即表现为互斥性(排它性)。synchronized关键字的使用使用synchronized关键字处理有两种模式:同步代码块、同步方法。首先看同步代码块模式:(1)必须...

2019-04-28 20:09:47 267

原创 生产者与消费者模型(JAVA实现)

生产者与消费者问题是线程模型中的经典问题,假设生产者和消费者分别是两个类,两个类之间互相调用存在着依赖关系,如果一个类被改变将会影响另外一个类。需要一个商品缓冲区来实现解耦由生产者线程生产出一个商品之后将由消费者线程开始消费。生产者与消费者模型实现思路如下图:首先创建商品类,用于搭建消费者与生产者之间的缓冲区。public class Goods { private final S...

2019-04-27 19:33:08 257

原创 剑指offer12:矩阵中的路径

设计一个函数,用来判断在一个矩阵中是否存在一条包含某个字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。利用回溯法的思想,除矩阵边界上的格子外,其它格子都有四个相邻的格子,当矩阵中坐标为(row,col)的格子和路径字符串下标为pathLength的字符一样时,从四个相邻的格子(row,...

2019-04-25 18:29:50 93

原创 Java多线程实现

1.继承Thread类实现多线程java.lang.Thread是一个线程操作的核心类。新建一个线程最简单的方法就是直接继承Thread类,而后覆写该类中的run()方法(就相当于主类中的main方法)。直接调用run方法:public class testThread { public static void main(String[] args) { MyThrea...

2019-04-24 16:20:39 128

原创 剑指offer-48:最长不含重复字符的子字符串

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。定义函数f(i)表示以第i个字符为结尾的不包含重复字符的子字符串的最大长度。下面以第i个字符之前有没有出现过重复字符分为两种情况讨论。如果第i个字符之前没有出现过重复字符,即f=f(i-1)+1。在字串“dhabcacfh”中,显然f(0)=1,计算下标为1的h之前没有出现过h,所以f(1)=f(0)+1=2。最长...

2019-04-23 15:19:58 108

原创 剑指offer-18:删除链表的结点

在本文中有关链表结构体和相关函数接口如下:typedef int DataType;typedef struct ListNode{ DataType data; struct ListNode *next;} ListNode;//创建结点static ListNode *CreateNode(DataType data){ ListNode *newNode = ...

2019-04-23 12:45:05 129

原创 剑指offer-3:数组中重复的数字

在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组里某些数字是重复的。请找出数组中任意一个重复的数字。解法一(需要改动数组):在数组number中从头到尾扫描整个数组,当扫描到下标为i的数字时,比较number[i]==i是否成立。成立则继续扫描下一个数字,不成立则拿它和第number[i]个数字进行比较。如果number[i] == number[number[i]]成立,则找到了...

2019-04-23 12:20:52 107

原创 剑指offer-63:股票的最大利润

假设把某股票的价格按照时间先后的顺序存储在数组中,请问买卖股票一次可能获得的最大利润是多少?解题思路为:股票的最大利润为买入的最低价和卖出的最高价之间的差值。定义min为数组中最小元素,定义maxDiff为数组中的元素间最大差值。将数组number[0]赋值给min,number[1] - min赋值给maxDiff。通过遍历整个数组不断更新min和maxDiff。从第2个元素开始遍历整个数...

2019-04-22 15:15:55 500

原创 UDP协议

UDP是一种简单的面向数据报、无连接、传输层协议,只提供数据交付和差错检测。UDP不提供错误校正,不保证有序,无法去重复,没有流量控制和拥塞控制,不对传送数据包进行可靠性保证,但是可以通过校验和提供错误侦测。UDP在IP报文中的格式如下:UDP其实就是在IP报文中添加了端口信息(UDP输出操作刚好产生一个UDP数据报,并组装成一份IP数据),使数据到达主机后送达至相应端口的应用程序。UDP...

2019-04-20 18:42:48 628

原创 剑指offer-35:复杂链表的复制

对于一个复杂链表,可以定义为每个结点除了有一个next指针指向下一个结点外,还有一个random指针指向链表中的任意一个结点或者NULL。本文中有关复杂链表结点结构体和创建结点接口定义如下:typedef struct ComplexNode { int data; struct ComplexNode *next; struct ComplexNode *random;} CN;...

2019-04-20 17:04:01 108

原创 ARP协议

ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议。ARP数据报的格式如下:其中各字段的含义如下:以太网目的地址:是广播报,目的是让同一个局域网上所有主机都收到ARP请求包;以太网源地址: 就是发送端地址;硬件类型指链路层网络类型,1为以太网;协议类型指要转换的地址类型,0x0800为IP地址;硬件地址长度对于以太网地址为6字节;协议地址长度对于和I...

2019-04-19 16:02:22 202

原创 剑指offer-40:最小的k个数

这道题的题目为:输入你个整数,找到其中最小的K个数。解题思路如下:1.数组对于输入的input数组,利用Partition排序对基于k的input数组对齐进行调整,调整后的input数组中位于第k个数的左边的数都小于k,右边的数都大于k。于是k左边的4个数就是最小的k个数,输出即可。代码如下:void Swap(int *a, int *b){ int t = *a; *a = *b...

2019-04-19 14:45:23 80

原创 剑指offer-7:重建二叉树

这道题的题目为:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。本文有关二叉树的结构体以及结点创建如下:typedef int DataType;typedef struct BSTreeNode{ DataType data; struct BSTreeNode *left; struct BSTreeNode *right;} BSTreeNode;BSTree...

2019-04-18 16:36:30 188

原创 剑指offer56-1:数组中只出现一次的数

这道题题目可以描述为:一个整型数组里除了两个数字之外,其它的数都出现了两次,请找出这两个数。异或运中算有一条特性:任何一个数字异或它自己都等于0。基于这条特性,我们可以总结出下面这条思路的解法:(1)首先将从头到尾异或数组中的每一位数,定义一个整型变量num,将结果保存在num中;(2)找出num二进制中最右边是1的那位,定义一个int型变量pos来标记;(3)将真个数组分为两个数组,分组...

2019-04-16 22:49:27 102

原创 剑指offer-60:n个骰子的点数

这道题的题目为:把你个骰子扔到地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。解题思路为:n个骰子的所有点数和最小的值为n,最大的为6n,用它除以6^n即每个点数出现的概率。利用递归算法的思路把n个骰子分为两堆,第一堆只有一个,另一个有n-1个,把单独那个骰子可能出现的点数与剩下的n-1个计算点数和。然后把剩下的分成两堆,第一堆只有一个,第二堆有n-2个骰子。然后...

2019-04-13 22:01:50 93

原创 剑指offer-42:连续子数组的最大和

这道题的题目为:输入一个整形数组,数组里有正数也有负数,数组中一个或连续的多个整数组成一个连续子数组。求所有子数组的和最大值,要求时间复杂度为O(n)。解题思路为:(1)定义一个整形的CurGreatSum来标记子数组的最大和,然后用一个整形的CurSum来存储当前的和。(2)从头遍历整个数组number,每遍历一个元素number[i],首先判断CurSum <= 0是否成立,若成立...

2019-04-12 19:15:45 133

原创 剑指offer-51:数组中的逆序对

这到题的题目为:数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这两个数组中逆序对的总数。解题思路:将数组分为若干个子数组,其中每一个数为一个子数组,先统计子数组内部之间的逆序对,并对它们进行排序。然后统计相邻两个子数组之间的逆序对用于对它们进行排序,直到整个数组有序则你秀数组统计完毕(如下图):代码如下:#include<stdio.h...

2019-04-10 17:20:10 119

原创 剑指offer-45:把数组排成最小的数

这道题的题目为:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。解题思路分为以下几个步骤;(1)对于给定的两个数a和b,将它们拼接起来得到ab和ba,为避免正整形ab或ba溢出问题,将它们转换成字符串进行比较。(2)如果ab>ba,此时a排在b的前面。此时定义a<b.若ab>ba,此时a排在b的后面,此时a>b。若ab=ba...

2019-04-09 15:10:29 91

原创 剑指offer-62:画圈中最后剩下的数字

这道题的题目为:0,1,…n-1这n个数排成一个圆圈,从数字0开始每次从这个圈中删除第m个数字。求出这个圈里剩下的最后一个数字。其实这就是约瑟夫环问题。本文中主要介绍介绍用单链表实现的算法。本文中有关单链表的结构体及接口定义如下:typedef int DataType;typedef struct ListNode{ DataType data; struct ListNode...

2019-04-08 22:45:38 182

原创 剑指offer-11:旋转数组的最小数字

这道题题目为:把一个数组最开始的若干个元素搬到数组的末尾,称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组(3,4,5,1,2)是数组(1,2,3,4,5)的一个旋转,最小值为1。解题思路分为以下几步:(1)数组是排序数组,利用二分法的思路,旋转后的数组可以划分为两个排序的子数组,前面子数组的元素大于或等于后面子数组元素,最小元素是它们的分界线。定义两个指针...

2019-04-03 13:27:10 64

原创 剑指offer-22:链表中倒数第K个结点

这道题的题目可以描述为:输入一个链表,输出该链表中倒数第k个结点。本文中有关链表的结构体以及接口定义代码如下:typedef int DataType;typedef struct ListNode{ DataType data; struct ListNode *next;} ListNode;//初始化void ListInit(ListNode **ppfirst...

2019-04-01 22:42:17 73

原创 剑指offer-15:二进制中1的个数

这道题题目可以描述为:请实现一个函数,输入一个整数,输出该数二进制中1的个数。这道题的基本思路可以理解为把一个整数与1做与运算,如果结果是1,表示该整数最右边一位是1,否则是0。然后每次判断完向右移动一位,直到整个整数为0为止。代码如下:int NumberOf1(int n){ int count = 0; while (n) { if (n & 1) count...

2019-03-31 22:25:37 113

原创 剑指offer-9:用两个栈实现一个队列

这道题题目可以描述为:用两个栈实现一个队列。队列的声明如下,请实现它的两个功能,即分别完成在队列尾部插入结点和在队列头部删除结点的功能。本文中有关栈的结构体和接口定义如下:typedef int DataType;#define MAXSIZE (100)typedef struct{ DataType array[MAXSIZE]; int top;//起了个别名,含...

2019-03-28 20:48:31 64

原创 剑指offer-27:有关二叉树的镜像

这道题的题目可以描述为:完成一个函数,输入一个二叉树,该函数输出它的镜像。本文中有关二叉树结构体和接口定义如下:typedef int DataType;typedef struct BSTreeNode{ DataType data; struct BSTreeNode *left; struct BSTreeNode *right;} BSTreeNode;BSTree...

2019-03-26 23:14:08 66

原创 剑指offer-30:包含min函数的栈

这道题的题目可以描述为:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数,在该栈中,调用min,push以及pop的时间复杂度都是O(1)。本文有有关栈的结构体以及接口定义代码如下:typedef int DataType;#define MAXSIZE (100)typedef struct{ DataType array[MAXSIZE]; i...

2019-03-25 22:15:51 106

空空如也

空空如也

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

TA关注的人

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