自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 资源 (3)
  • 收藏
  • 关注

原创 归并排序

时间复杂度O(nlogn)稳定import java.util.*;public class Main{ public static void mergeSort(int arr[]){ int ans[] = new int[arr.length]; //这里创建一个数组,以免重复申请,耗费资源 divide(arr,0,arr.length-1,...

2019-03-30 23:17:53 123

原创 机器人的运动范围

题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?public class Solution ...

2019-03-28 16:18:10 250

原创 矩阵中的路径

题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符...

2019-03-28 15:49:18 132

原创 平衡二叉树实现(Java)

终于搞出来了!!!import java.util.LinkedList;public class AVLTree { private TreeNode root = null; class TreeNode { int val; int height; int balance; TreeNode parent;...

2019-03-23 23:34:30 607 1

原创 生产者消费者实现的两种方式(基于wait和notify,基于BlockingQueue)

1、基于wait和notify的实现import java.util.concurrent.*;class Consumer implements Runnable{ public void run(){ try{ while(!Thread.interrupted()){ synchronized(this){...

2019-03-22 20:19:51 180

原创 KMP算法

这里暂时只是记录一下KMP算法代码,详细步骤以后有时间再整理public class Main{ public static int[] getNext(String str){ char p[] = str.toCharArray(); int next[] = new int[p.length]; next[0] = -1; ...

2019-03-19 15:12:24 157

原创 关线程安全以及如何实现线程安全

有时候越是基础的概念,反而越是模糊。有时候先要对概念理解清楚。学习Java多线程,经常跟线程安全打交道,那么什么是线程安全呢?一、什么是线程安全《Java并发编程实践》中对线程安全有这样的定义:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程...

2019-03-18 20:44:16 367

原创 滑动窗口的最大值

题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个:{[2,3,4],2,6,2,5,1},{2,[3,4,2],6,2,5,1},{2,3,[4,2,6],2,5...

2019-03-15 23:42:03 139

原创 数据流中的中位数

题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。分析:题意是这样的:这里有两个方法,一个是读数据的,一个是根据之前读入的数据计算出数据的中位数。这里题...

2019-03-15 22:35:03 134

原创 二叉搜索树的第k个节点

题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。思路:因为是在二叉搜索树中搜索,所以这里利用中序遍历的方式,恰好能得到从小到大的排序。这里只需要找到第k小数即可,因此不需要遍历整棵树。import java.util.LinkedList;public class Solution { ...

2019-03-15 20:10:29 183

原创 序列化二叉树

题目描述请实现两个函数,分别用来序列化和反序列化二叉树思路:这里的序列化,题目没有说明清楚是如何进行序列化,这里只需要通过你的序列化函数和反序列化函数得到原二叉树即可。这里序列化,采用前序遍历方式,每个节点之间用 , 分隔,如果遇到空节点用 # 标识。我们就可以写出这样的代码:import java.util.LinkedList;public class Solution { ...

2019-03-15 19:56:17 595

原创 把二叉树打印成多行

题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。思路:利用队列做层次遍历。要分清楚哪些节点属于同一层,可以在每一层结束的时候加入一个null值指示。import java.util.LinkedList;import java.util.ArrayList;public class Solution { ArrayList<ArrayList&lt...

2019-03-15 18:12:59 501

原创 按之字形顺序打印二叉树

题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路:这里利用LinkedList模拟队列。创建两个辅助队列,r_l (存储从右向左的节点)和 l_r(存储从左向右的节点)当为第一层节点时,用r_l存储,当为第二层节点时,用 l_r 存储,这样依次交换。import java.ut...

2019-03-15 17:54:08 289

原创 对称的二叉树

题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。public class Solution { boolean isSymmetrical(TreeNode pRoot) { if(pRoot==null) return true; return isSame(pRoot.le...

2019-03-15 16:43:56 115

原创 二叉树的下一个节点

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。存在这样一个规律:如果该节点的右子树不为空,那么下一个要遍历的节点为右子树最左边节点如果该节点的右子树为空,那么下一个要遍历的节点为祖先节点。找该祖先节点的规则为 : 如果该节点为父节点的右儿子,则继续向上找,直到该节点为父节点的左儿子。那么该父节...

2019-03-15 16:32:14 105

原创 删除链表中重复的节点

题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5/* public class ListNode { int val; ListNode next = null; ListNode(in...

2019-03-15 15:12:08 99

原创 链表中环的入口节点

题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。1、第一种做法,记录遍历过的每个节点,当遇到相同的节点时,即遇到了环,并且遇到的第一个相同节点即为环的入口。这里用HashSet,将节点的查找速度压缩到O(n);/* public class ListNode { int val; ListNode next = null; Li...

2019-03-14 23:42:42 181

原创 构建乘积数组

题目描述给定一个数组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]。不能使用除法。import java.util.ArrayList;public class Solution { public int[] multiply(int[] A) { int len ...

2019-03-14 16:11:52 76

原创 HashMap源码分析

先从几个问题出发,然后通过源码分析,解决这几个问题。可以在看源码的时候时刻思考这几个问题,这样既有了目标也会对HashMap的运行原理有一个更深入的理解。HashMap的原理,内部的数据结构?讲一下HashMap中put方法的过程讲一下HashMap中get方法的过程HashMap中的hash函数是怎么实现的?还有那些实现方式(扩展)?HashMap怎么解决冲突?还有什么其他解决has...

2019-03-14 09:38:27 155

原创 数组中只出现一次的数字

题目描述一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。这里先看这样一种场景:一个整型数组中除了一个数字外,其他所有数字都出现了一次。这个我们可以根据异或的性质,将数组中的所有的数字都取异或即可找到该数字。因为相同的数字异或为0,任何数字与0异或结果都为这个数。那么我们再看这道题,这个是让我们求一个数组中的两个只出现一次的数字,其他都出现了偶数次...

2019-03-12 20:55:32 130

原创 平衡二叉树

题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。这个题只要判断根的左右子树到叶节点的最大深度差即可。如果绝对值大于1,则不是平衡二叉树,如果小于等于1则是平衡二叉树。public class Solution { public boolean IsBalanced_Solution(TreeNode root) { if(root==null) return t...

2019-03-12 20:17:08 128

原创 二叉树的深度

题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。可以通过递归的方式,这种方式实现简单,可以从底部向上计数也可以从顶部向下计数。也可已通过非递归的方式实现。1、自底部向上计数public int TreeDepth(TreeNode root) { if(root==null) return 0...

2019-03-12 19:51:54 151

原创 统计一个数字在排序数组中出现的次数

题目描述统计一个数字在排序数组中出现的次数。因为是排序好的,所以利用快排的原理,查找,不过这里要稍微修改一下,使得可以查询一个double类型的数据。import java.util.Arrays;public class Solution { public int GetNumberOfK(int [] array , int k) { return binaryS...

2019-03-12 19:23:34 1543 2

原创 求两个链表的第一个公共节点

题目描述输入两个链表,找出它们的第一个公共结点。做法有两种:1、利用HashSet,先将第一个链表中所有节点放入,Set集合中,然后遍历第二个链表,找出第一个和Set集合中匹配的节点。时间复杂度为O(n)2、利用特性,因为两个链表有公共节点,那么从公共节点开始,他们后面的所有节点数目是一致的。所以,让较长链表先走length长度,直到两个链表的剩余节点数目一致,然后两个链表一起走,直到找到...

2019-03-12 16:18:48 1492

原创 volatile关键字特性及原理

当一个变量被volatile修饰后,具有两个特性:保证此变量对所有线程的可见性禁止指令重排序优化volatile的使用场景运算结果不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值变量不需要与其他的状态变量共同参与不变约束volatile修饰的变量在赋值后多执行了一个“lock addl $0x0,(%esp)”操作。这个操作相当于一个内存屏障。只有一个CPU访问内存时...

2019-03-11 23:14:49 518

原创 synchronized底层实现原理及锁优化

一、概述1、synchronized作用原子性:synchronized保证语句块内操作是原子的可见性:synchronized保证可见性(通过“在执行unlock之前,必须先把此变量同步回主内存”实现)有序性:synchronized保证有序性(通过“一个变量在同一时刻只允许一条线程对其进行lock操作”)2、synchronized的使用修饰实例方法,对当前实例对象加锁修饰...

2019-03-11 19:02:26 74978 21

原创 ThreadPoolExecutor机制

1、概述ThreadPoolExecutor是java.util.concurrent包中的线程池类,它可根据参数的不同,构造出不同特性的线程池。掌握其构造方式和原理是极其重要的,如不了解其特性很容易造成OOM。2、核心构造器详解public ThreadPoolExecutor(int corePoolSize, int maxi...

2019-03-10 20:11:40 180

原创 计算丑数

题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。这里暴力的算法是不行的,只能通过前面的丑数去退出后面的丑数,一直推到N。问题是如何保证计算出的丑数是有序的呢?这里的丑数都是由2、3、5、计算得出。于是我们从1开始,逐个计算出最小的丑数,那么一直到最后...

2019-03-10 15:44:13 342

原创 把数组排成最小的数

题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。这里只需要重新定义一下比较规则,然后利用排序算法计算即可。import java.util.*;public class Solution { class MyComparator implemen...

2019-03-10 15:10:52 98

原创 ThreadFactory线程工厂

看一下这个接口的源码public interface ThreadFactory { /** * Constructs a new {@code Thread}. Implementations may also initialize * priority, name, daemon status, {@code ThreadGroup}, etc. *...

2019-03-10 11:49:07 1919

原创 详解BlockingQueue

1、特点:当从这个队列中取元素时,它支持这样的操作:如果队列为空,那它就等待队列不为空时,再执行取操作。当向这个队列中存元素时,它支持这样的操作:如果队列已满,那它就等待队列可用,再向队列中存放元素。下面BlockingQueue中的方法支持这样的操作,当不同的方法操作不能立即被满足,但是在将来可能被满足:第一个抛出异常,第二个返回一个特殊的值(null或false,取决于哪种操作),第三块...

2019-03-10 11:01:51 2808

原创 整数中1出现的次数

题目描述求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。这个题由暴力和找规律两种算法。1、暴力(大家都会,不多说)public...

2019-03-07 22:54:15 1058 1

原创 java类加载机制

最近发现用思维导图学习是个不错的方法,这里尝试用思维导图来写博客

2019-03-06 20:23:57 107

原创 最小的k个数

题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。1、利用快排的原理,每次对文件进行一次划分,根据划分的结果不断缩小换分的区间,直到以k为基数进行划分。那么前k个数都比k小。import java.util.ArrayList;public class Solution { public ArrayLi...

2019-03-06 12:34:18 147

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

题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。对于这个题目,有多种做法。1、对数组进行排序,然后计数,时间复杂度O(nlogn)(快排)2、利用HashMap,对每个数字进行计数,好的情况时间复杂度为O(n);因为Has...

2019-03-06 11:53:32 104

原创 字符串的排列

题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母思路:这个题和求一个数组的全排列思想是差不多的。将这个字符串看成是由两部分组成:第一个字符和后面所有字符。求出所有可能的字符串...

2019-03-06 11:09:58 246

原创 二叉搜索树与双向链表

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路:将二叉搜索树转换为排序的双向链表,从有序就可以看出,我们需要通过中序遍历来实现。然后设置两个指针,一个pre指向前一个节点,一个cur执行当前节点,然后让这两个指针互指就可以了。节点:/**public class TreeNode { int val...

2019-03-06 10:37:25 97

原创 复杂链表的复制

题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)解析:题意是说,有这样一个链表,他有两个指针,一个指针指向下一个节点,另一个指针指向该链表的任意一个节点。复制这个链表。这样的话,只能分为两步计算,先复制整个链表,然后复制...

2019-03-06 10:00:31 141

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

题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)这里的考点除了要求出所有的路径外,还要对结果进行一次排序。这里为了方便,只需要自定义一个类继承Comparator接口,重写compare方法就好了。这里求路径,因为要求出每一个叶子节...

2019-03-05 20:54:37 216

原创 二叉搜索树的后序遍历

题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。这个题以后再来看看,还需多思考一下。public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { if(sequence==null...

2019-03-05 19:52:09 93

javax.ejb-api.jar

javax.ejb-api.jar 这个包是用于EJB开发的工具包,请需要的自行下载

2019-04-14

EJB入门项目

里面是一个简单的基于IDEA+JBoss7.1.1实现的一个入门级EJB项目

2019-04-14

c++stl库头文件及其源码

c++中常用模板库头文件及其源代码,例如,,等

2018-03-19

空空如也

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

TA关注的人

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