- 博客(59)
- 资源 (2)
- 收藏
- 关注
原创 剑指offer-面试题58-二叉树的下一个结点
package case58_GetBinaryTreeNextNode;/** * 题目: 给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个节点?树中的节点除了有两个分别指向左右子节点的指针以外, * 还有一个指针指向父节点的指针。 * * @author WangSai * */public class GetBinaryTreeNextNode { /**
2017-04-30 22:03:49 650
原创 剑指offer-面试题43-n个骰子的点数
package case43_DicesProbability;import java.util.HashMap;/** * @author WangSai * */public class DicesProbability { /** * @param args */ public static void main(String[] args) { int nu
2017-04-30 17:23:31 879
原创 剑指offer-面试题44-扑克牌的顺子
package case45_IsContinousCards;/** * 题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1, J为11, * Q为12,K为13,而大、小王可以看成任意数字。 * * 思路:1,把两个王定义为0。2,然后对这5个数字排序。3,统计排序数组中的0的个数,即王的个数。4,非0相邻数字的差值,即是否连续,
2017-04-30 13:08:13 786
原创 剑指offer-面试题33-把数组排成最小的数
package case33_SortArrayForMinNumber;import java.util.Comparator;/** * 题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 * 例如输入数字{3,32,321},则打印出这3个数字能拍成的最小数字321323。 * * @author WangSai * */
2017-04-30 01:28:25 575
原创 剑指offer-面试题55-字符流中第一个不重复的字符
package case55_FirstCharInStream;import java.util.LinkedHashMap;/** * 题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符“go”时,第一个只出现一次的字符是‘g’。 * 当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是‘l’。 * * @aut
2017-04-29 12:34:55 650
转载 hashMap线程不安全的原因及表现-2
一直以来只是知道HashMap是线程不安全的,但是到底HashMap为什么线程不安全,多线程并发的时候在什么情况下可能出现问题?HashMap底层是一个Entry数组,当发生hash冲突的时候,hashmap是采用链表的方式来解决的,在对应的数组位置存放链表的头结点。对链表而言,新加入的节点会从头结点加入。javadoc中关于hashmap的一段描述如下:此实现不是同步的。如果多个
2017-04-29 11:14:01 479
转载 HashMap和LinkedHashMap的区别联系
java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap. Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取
2017-04-28 20:36:49 381
原创 剑指offer-面试题53-正则表达式匹配
题目:请实现一个函数用来匹配包括'.’和'*'的正则表达式。模式中的字符'.’表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配。分析;常规中,如果是普通的两个字符串,那很简单,我们直接进行对比就可以了,这里又是要求匹配是指字符
2017-04-28 10:51:03 529
转载 字符串全排列算法
转载自:http://blog.csdn.net/wzy_1988/article/details/8939140#comments前言字符串的排列组合问题,困扰了我好久,递归的思想我今天一定要掌握,擦,话不多说,博客走起!问题输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,
2017-04-27 18:17:41 318
原创 剑指offer-面试题28-字符串的排列
问题输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba思路这是典型的递归求解问题,递归算法有四个特性:必须有可达到的终止条件,否则程序陷入死循环子问题在规模上比原问题小子问题可通过再次递归调用求解子问题的解应能组合成整个问题的解对于字符
2017-04-27 18:05:18 420
原创 剑指offer-面试题42-翻转单词顺序VS左旋转字符串
旋转单词顺序:package case42_1ReverseSentence;import java.util.Stack;/** * 题目1:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串“I am a * student.”, 则输出“ student. a am I ”。 * * @author W
2017-04-27 12:17:18 567
原创 剑指offer-面试题41-和为s的两个数字VS和为s的连续正数序列
和为s的两个数字:package case41_1TwoNumbersWithSum;/** * 题目1:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出 任意一对即可。 * 例如输入数组{1,2,4,7,11,15}和数字15.由于4+11=15,一次输出4+11。 * * @author WangSai * */
2017-04-26 14:53:15 512
原创 剑指offer-面试题61-按之字形顺序打印二叉树
二叉树节点结构定义:package case62_PrintTreeInZigzag;/** * 定义二叉树节点结构 * * @author WangSai * */public class MyNode { int data; MyNode lchild; MyNode rchild; public MyNode() { // TODO Auto-genera
2017-04-25 23:35:49 564
原创 剑指offer-面试题65-滑动窗口的最大值
package case65_maxInWindow;import java.util.ArrayDeque;import java.util.ArrayList;/** * 题目:给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口, * 他们的最大值分别为{4,4,6,6,6,
2017-04-25 22:06:34 603
原创 剑指offer-面试题31-连续子数组的最大和
package case31_FindGreastSumOfSubArray;import java.util.ArrayList;/** * 题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(N)。 * * @author WangSai * */public class FindGreas
2017-04-25 14:42:24 454
原创 剑指offer-面试题47-不用加减乘除做加法
package case47_AddTwoNumbers;/** * 题目:写一个函数,求两个整数之和,要去在函数体内不得使用+ - * / 四则运算符号。 * * 思路:如果是十进制的处理方法: * * 第1步:两个数做不进位的加法,如 5+17= (5+7=2)+(0+10=10)=12。 第2步:处理进位,5+7,进位为10。 * 第3步:把第一步和第二步的结果加起来,即
2017-04-25 00:49:24 543
原创 剑指offer-面试题21-包含min函数的栈
package case21_MyStackWithMin;import java.util.Stack;/** * 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min,push,pop的时间复杂度都是O(1)。 * * @author WangSai * */public class MyStackWithMin { /**
2017-04-24 22:52:30 506
原创 剑指offer-面试题51-数组中重复的数字
package case51_FindDuplicateNumbers;import java.util.HashMap;import java.util.HashSet;/** * 题目:在一个长度为n的数组中的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。 * 请找出数组中任意一个重复的数字。例如,如果输入长度为7的
2017-04-24 21:00:35 521
原创 剑指offer-面试题60-把二叉树打印成多行
二叉树节点定义:package case60_PrintBinaryTreeByRows;/** * 二叉树节点结构定义。 * * @author WangSai * */public class MyNode { int data; MyNode lchild; MyNode rchild; public MyNode() { } public MyNod
2017-04-24 16:19:57 687
原创 剑指offer-面试题63-二叉搜索树的第k个结点
二叉树节点定义:package case63_KthNodeOfBST;/** * 二叉搜索树的结点结构定义 * * @author WangSai * */public class MyNode { int data; MyNode lchild; MyNode rchild; public MyNode() { } public MyNode(int da
2017-04-24 12:04:12 486
原创 剑指offer-面试题37-两个链表的第一个公共结点
package case37_FindFirstCommonNode;import java.util.Stack;/** * 题目:输入两个链表,找出他们的第一个公共结点。 * * @author WangSai * */public class FindFirstCommonNode { /** * 方法1: * * 思路:从单链表的尾节点开始寻找,把两
2017-04-24 01:03:12 449
原创 剑指offer-面试题35-第一个只出现一次的字符
package case35_FindFirstNotRepeatingChar;import java.util.LinkedHashMap;/** * 题目:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出‘b’ * * @author WangSai * */public class FindFirstNotRepeatingChar {
2017-04-23 22:38:28 555 1
原创 剑指offer-面试题25-二叉树中和为某一值的路径
二叉树节点定义:package case25_FindPathInTree;/** * 二叉树节点结构 * @author WangSai * */public class MyNode { int data; MyNode lchild; MyNode rchild; public MyNode() { } public MyNode(int data) {
2017-04-23 17:52:43 453
原创 剑指offer-面试题18-树的子结构
二叉树节点定义:package case18_isTree1IsSubtreeOfTree2;public class myTreeNode { int data; myTreeNode lchild; myTreeNode rchild; public myTreeNode() { } public myTreeNode(int data) { this.data =
2017-04-22 16:32:51 534
原创 剑指offer-面试题39-二叉树的深度
二叉树节点定义package case39_TreeDepth;/** * 二叉树节点 * * @author WangSai * */public class myTreeNode { int data; public myTreeNode lchild; public myTreeNode rchild; public myTreeNode() { } p
2017-04-22 14:53:43 462
原创 剑指offer-面试题11-数值的整数次方
1 累乘的方法package case11_Power;/** * 题目:实现函数 double Power(double base,int exponent),求base的exponent次方。 * 不得使用库函数,同时不需要考虑大数问题。 * * 该实现方法计算速度比较慢,需要一次一次的累乘。 * * @author WangSai * */public clas
2017-04-21 22:44:20 482
原创 剑指offer-面试题22-栈的压入、弹出序列
package case22_StackPushPopOrder;import java.util.Stack;/** * 题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出序列。假设压入栈的所有数字均不相等。 * 例如序列1,2,3,4,5是某栈的压栈序列,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列
2017-04-21 20:20:07 461
原创 剑指offer-面试题23-层序遍历二叉树
二叉树定义:package case23_PrintFromTopToBottom;/** * 二叉树节点 * * @author WangSai * */public class myTreeNode { int data; myTreeNode lchild; myTreeNode rchild; public myTreeNode() { } publi
2017-04-21 11:16:31 563
原创 剑指offer-面试题14-调整数组顺序使奇数位于偶数前面
这个题目要求把奇数放在数组的前半部分, 偶数放在数组的后半部分,因此所有的奇数应该位于偶数的前面。也就是说我们在扫描这个数组的时候, 如果发现有偶数出现在奇数的前面,我们可以交换它们的顺序,交换之后就符合要求了。因此我们可以维护两个指针,第一个指针初始化时指向数组的第一个数字,它只向后移动:第二个指针初始化时指向数组的最后一个数字, 它只向前移动。在两个指针相遇之前,第一个指针总是位于第二
2017-04-20 23:19:44 532
原创 剑指offer-面试题13-在O(1)时间删除链表节点
package case13_DeleteNodeInList;/** * 题目:给定单链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。 * * 思路: * * 1,要删除的节点是尾节点时,通过遍历,删除该节点。 * * 2,链表中有多个节点,要删除的节点NodeP是中间节点时,通过NodeP的下一个节点覆盖当前节点的内容,并且NodeP指向下一个的下一个节点
2017-04-20 20:54:19 453
原创 剑指offer-面试题8-旋转数组的最小数字
package case08_MinNumInRotatedArray;/** * 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,求输出旋转数组的最小元素。 * 例如数组为{1,2,3,4,5},它的一个旋转为{3,4,5,1,2},该数组的最小值为1. 思路:利用二分查找的办法。 * * @author WangSai
2017-04-20 16:58:19 475
原创 剑指offer-面试题34-丑数
题目描述 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路分析: 思路一:逐个判断每个整数是不是丑数的解法,直观但不高效(牛客网测试超时) 所谓一个数m是另一个数n的因子,是指n能被m整数,也就是n%m==0。
2017-04-20 13:17:57 482
原创 剑指offer-面试题07-衍生题目:用两个队列实现栈
package case07_StackWithTwoQueues;/** *题目:用两个队列实现栈,并且实现栈的pop,push,empty,top(获取栈顶元素,但是不删除) * @author WangSai * */import java.util.ArrayDeque;public class StackWithTwoQueues { // 两个队列,在模拟实现栈的时
2017-04-20 01:12:27 660
原创 剑指offer-面试题07-用两个栈实现队列
package case07_QueueWithTwoStacks;import java.util.Stack;/** * 题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。 * * @author WangSai * */public class QueueWit
2017-04-20 00:11:51 528
原创 剑指offer-面试题30-最小的K个数
1,O(n)的算法,只有当我们可以修改输入的数组时可用package case30_GetLeastNum;/** * 题目:输入n个整数,找出其中最小的k个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4 * 方法:利用partition函数完成,采用这种思路是有限制的。我们需要修改输入的数组,因为函数Partition会调整数组中数字的顺序
2017-04-18 22:54:10 568
原创 剑指offer-面试题29-数组中出现次数超过一半的数字
解法一:基于partition函数的O(n)算法数组中有一个数字出现的次数超过了数组长度的一半。如果把这个数组排序,那么排序之后位于数组中间的数字一定就是那个出现次数超过数组长度一半的数字。也就是说,这个数字就是统计学上的中位数,即长度为n 的数组中第n/2 大的数字。这种算法是受快速排序算法的启发。在随机快速排序算法中,我们先在数组中随机选择一个数字,然后调整数组中数字的顺序, 使得
2017-04-18 20:35:11 582
原创 剑指offer-面试题09-斐波那契数列
题目1:写一个函数,输入n,求斐波那契数列的第n项。题目2:变态跳台阶。一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题目2的解法如下:关于本题,前提是n个台阶会有一次n阶的跳法。分析如下: f(1) = 1 f(2) = f(2-1) + f(2-2) //f(2-2) 表示2阶一次跳2阶的次
2017-04-18 11:04:53 445
原创 剑指offer-生产者消费者模型
模拟消费者和生产者的多线程生产。1,Resource.java定义了一个数组,生产者向里面存入数据,消费者从里面取出数据。2,Input.java ,生产者线程3,Output.java, 消费者线程//创建资源类 Resource.javapackage case98_ProducerConsumer;//创建资源类public class Resource {
2017-04-18 00:07:24 311
原创 剑指offer-快速排序
快速排序package case99_QuickSort;public class QuickSort { // 快速排序 public static void main(String[] args) { int[] arr = { 9, 9, 5, 8, 3, 7, 4, 6, 2 }; QSort(arr); for (int i = 0; i < arr.length
2017-04-17 17:41:28 706
转载 Socket长连接和短连接
1 概念Socket:socket实际上是对TCP/IP进行的封装,我们可以使用socket套接字通过socket来传输。首先我们需要明白的一个概念就是通道,简单地说通道就是两个对端可以随时传输数据的信道。我么常说的所谓建立socket连接,也就是建立了客户端与服务器端的通道。长短连接:显而易见,长连接也就是这个socket连接一直保持连接,也就是通道一直保持通畅,两个对端
2017-04-15 19:32:30 3381
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人