剑指offer-java
happy_bigqiang
这个作者很懒,什么都没留下…
展开
-
55-FirstCharacterInStream
题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符。public class FirstCharacterInStream { /*原创 2018-01-18 21:29:22 · 250 阅读 · 0 评论 -
29MoreThanHalfNumber(数组中出现次数超过一半的数字)
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。import java.util.HashMap;import java.util.Map;/** * @author LemonLin * @Description :Mo原创 2018-04-11 15:19:13 · 284 阅读 · 0 评论 -
30KLeastNumbers(最小的K个数)
最小的K个数 题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。import java.util.ArrayList;import java.util.Comparator;import java.util.PriorityQueue;/** * @author LemonLin * @Descriptio原创 2018-04-12 22:41:30 · 224 阅读 · 0 评论 -
31GreatestSumOfSubarrays连续子数组的最大和
连续子数组的最大和题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠原创 2018-04-12 22:47:43 · 503 阅读 · 0 评论 -
数据库总结
参考:https://blog.csdn.net/login_sonata/article/details/75268075B树和B+树:B树是由平衡二叉树为雏形,特点: M阶(指的是某个节点的最多的孩子节点数,即某个节点的指针数)的B树具有如下属性: 1、 根结点的儿子数为[2, M] 2、 除根结点以外的非叶子结点的儿子数的范围是[M/2, M],左边向上取整; 3、 非叶原创 2018-05-01 21:03:26 · 184 阅读 · 0 评论 -
java并发编程基础()
一、基础概念: ○同步和异步: 同步,异步通常是用来形容一次方法的调用。同步方法一旦开始,调用者必须等到方法调用返回侯,才能继续后续的行为。异步方法更像一个消息传递。○并发和并行: 严格意义讲:并行的多个任务是真实的同时进行;并发是,这个过程交替进行,对外部观察者来说,即使多个任务之间是串行并发的,也会造成多任务间是并行执行的错觉。 ○阻塞和非阻塞: 用来形...原创 2018-04-19 11:45:49 · 211 阅读 · 0 评论 -
39_1TreeDepth(二叉树的深度)
题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。import common.TreeNodeCommon;/** * @author LemonLin * @Description :TreeDepth39_1 * @date 2018/5/12-10:54 */public class Tree...原创 2018-05-12 11:01:37 · 1314 阅读 · 0 评论 -
39_2BalancedBinaryTree(平衡二叉树)
输入一棵二叉树,判断该二叉树是否是平衡二叉树。import common.TreeNodeCommon;/** * @author LemonLin * @Description :BalancedBinaryTree39_2 * @date 2018/5/13-11:17 * 基本思路是利用求左右二叉树的深度,来求差值,利用递归思想。 */public class Balan...原创 2018-05-13 11:35:31 · 156 阅读 · 0 评论 -
41_1TwoNumbersWithSum(和为S的两个数字)
题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述: 对应每个测试案例,输出两个数,小的先输出。import java.util.ArrayList;/** * @author LemonLin * @Description :TwoNumbersWithSum41_1 * @...原创 2018-05-14 22:11:34 · 192 阅读 · 0 评论 -
37FirstCommonNodesInLists(两个链表的第一个公共结点)
输入两个链表,找出它们的第一个公共结点。import common.ListNodeCommom;/** * @author LemonLin * @Description :FirstCommonNodesInLists37 * 总体思路:1、首先要知道链表是单向链表。如果两个单向链表有公共的结点,那么两个链表从某一个结点开始, * 它们的next都指向同一个结点。 * 2、先求出两个链原创 2018-05-08 15:50:48 · 196 阅读 · 0 评论 -
38GetNumberOfK(数字在排序数组中出现的次数)
题目描述 统计一个数字在排序数组中出现的次数。import java.util.HashMap;/** * @author LemonLin * @Description :GetNumberOfK38 * @date 2018/5/8-15:58 * * 基本思路是使用hashmap中的key来记录array中的数,使用value来记录出现的次数。 * 不能用数组的原因是,如果数字很原创 2018-05-08 17:18:25 · 304 阅读 · 1 评论 -
41_2ContinuesSquenceWithSum(和为S的连续正数序列)
和为S的连续正数序列 题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述: 输...原创 2018-06-11 19:52:57 · 171 阅读 · 0 评论 -
42_1ReverseSentence(翻转单词顺序列)
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。 * 同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。 * 例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了, * 正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?...原创 2018-06-13 17:31:24 · 1305 阅读 · 0 评论 -
42_2LeftRotateString(左旋转字符串)
这里写代码片 /** * @author LemonLin * @Description :LeftRotateString42_2 * @date 2018/7/23-19:37 * * 题目描述 * 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。 * 对于一个给定的字符序列S,请你把其循环左移K位后的序...原创 2018-08-01 11:19:53 · 395 阅读 · 0 评论 -
IsContinuous44(扑克牌顺子)
import java.util.Arrays;/** * @author LemonLin * @Description :IsContinuous44 * @date 2018/9/3-20:25 * * * 题目:扑克牌顺子 * * 题目:随机抽取扑克牌中的5张牌,判断是不是顺子,即这5张牌是不是连续的。 * 其中A看成1,J看成11,Q看成12,K看成13,大小王可以...原创 2018-09-04 11:30:00 · 182 阅读 · 0 评论 -
Probability43(n个骰子的点数)
题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。这里只求出输入n,打印出S的所有可能的值的种类数,概率除以6的次方n即可;/** * @author LemonLin * @Description :Probability43 * @date 2018/8/28-11:10 * * 题目:n个骰子点数和及各自出现的概率 * 把...原创 2018-09-01 20:12:51 · 299 阅读 · 0 评论 -
LastRemaining45(圆圈中最后剩下的数字(约瑟夫问题))
import java.util.LinkedList;/** * @author LemonLin * @Description :LastRemaining45 * @date 2018/9/4-20:45 * * 题目:圆圈中最后剩下的数字(约瑟夫问题) * * 题目:0, 1, … , n-1 这 n 个数字排成一个圈圈, * 从数字 0 开始每次从圆圏里删除第 m 个...原创 2018-09-07 12:11:46 · 518 阅读 · 0 评论 -
HeapSortByLemonLin(堆排序)
import java.util.Scanner;/** * @author LemonLin * @Description :HeapSortByLemonLin * @date 2018/4/3-21:26 */public class HeapSortByLemonLin { public void HeapSort(int [] L){ //因为根...原创 2018-04-07 17:06:33 · 178 阅读 · 0 评论 -
35FirstNotRepeatingChar(第一个只出现一次的字符)
第一个只出现一次的字符题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置package common;import java.util.HashMap;/** * @author LemonLin * @Description :FirstNotRepeatingChar35 * @date 2018/4/16-15:27原创 2018-04-16 16:20:31 · 395 阅读 · 0 评论 -
22StackPushPopOrder
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)import java.util.Stack;/** * 怎么判断退出条件是关键?返回结果原创 2018-03-15 17:10:40 · 205 阅读 · 0 评论 -
9. Fizz Buzz 问题-18
给你一个整数n. 从 1 到 n 按照下面的规则打印每个数:如果这个数被3整除,打印fizz. 如果这个数被5整除,打印buzz. 如果这个数能同时被3和5整除,打印fizz buzz. 样例 比如 n = 15, 返回一个字符串数组:[ “1”, “2”, “fizz”, “4”, “buzz”, “fizz”, “7”, “8”, “fizz”, “buzz”,原创 2018-03-01 22:00:59 · 301 阅读 · 0 评论 -
07QueueWithTwoStacks
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。import java.util.Stack;/** * @author LemonLin * @Description :QueueWithTwoStacks07 * @date 2018/2/22-16:28 * * 解题要点: * 1、要实现进队列和出队列;进队列没什么问题; * 2、原创 2018-02-24 09:35:26 · 216 阅读 · 0 评论 -
15KthNodeFromEnd链表中倒数第k个结点
题目描述 输入一个链表,输出该链表中倒数第k个结点import common.ListNodeCommom;/** * 解题思路: * 本题注意下要控制代码的鲁棒性问题,包括三个点: * 1、传入的指针可能为空指针; * 2、K值可能为0 ,0如果设定为无符号的数(即 unsigned ),那么0-1= 一个很大的数;可能要循环很多次 * 3、需要寻找K个,其实可能链表没有原创 2018-02-24 09:41:19 · 201 阅读 · 0 评论 -
16ReverseList反转链表
题目描述 输入一个链表,反转链表后,输出链表的所有元素。import common.ListNodeCommom;/** * 关于指针有一个注意点的地方: * 指针变量放右边有两种意思: * 一、赋值:表示右边的指针变量赋值给左边的指针变量 * 二、指向:表示左边的指针变量指向右边的指针变量所指的结点 * 解题思路: * 1、要用到三个指针原创 2018-02-24 09:42:50 · 155 阅读 · 0 评论 -
17MergeSortedLists合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。import common.ListNodeCommom;/** * 解题思路比较简单,主要用到了递归的思路: * 互相比较两个链表的开始结点,使用一个pHeadMerge合并指针来指向合并后的链表 * 主要考虑当两个链表中的其中一个链表比较结束之后该怎么处理 * @author Le原创 2018-02-24 09:44:45 · 259 阅读 · 0 评论 -
18SubstructureInTree树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)import common.TreeNodeCommon;/** * 解题思路: * 分为两步骤: * 一、先判断根节点是不是相同的,使用一种遍历方法,遍历需要判定的树,进行判断。 * 二、对左右子树进行判断,这个问题比较多,应该仔细反复思考下; * * @author LemonL原创 2018-02-24 09:48:39 · 151 阅读 · 0 评论 -
09Fibonacci斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39/** * 没有什么难度,就是不要用递归去处理,效率比较低 * 正确的做法是保留中间的结果 * @author LemonLin * @Description :Fibonacci09 * @date 2018/2/25-11:48 */public class Fibonacci0原创 2018-02-25 12:05:42 · 156 阅读 · 0 评论 -
08MinNumberInRotatedArray旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。/** * * 解题思路: * 1、考虑用二分法的两个指针的方法:时间复杂度比用顺序遍历法的好,边界条件是原创 2018-02-25 11:20:17 · 174 阅读 · 0 评论 -
20顺时针打印矩阵PrintMatrix20
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.import java.util.ArrayList;/** * java 如何获取一个2维数组的长和宽? * * 如一定义原创 2018-03-11 21:34:31 · 341 阅读 · 0 评论 -
10NumberOf1InBinary二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。/** * 主要思路是使用左移和位与,这两个技能点 * 右移的条件比较复杂,可能会造成无限循环,左移比较清晰一点 * while和if的条件判断语句是需要Boolean类型的,可以考虑加!= 0 * * @author LemonLin * @Description :NumberOf1InBinary10 *原创 2018-02-25 16:36:58 · 184 阅读 · 0 评论 -
11Power数值的整数次方
题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。/** * 主要考虑的是怎么处理0和负指数的问题,常规的正指数比较简单 * 计算机内表示小数时会有误差,判断两个小数是否相等,只能判断它们之差的绝对值是不是在一个很小的范围内 * @author LemonLin * @Description :Power11 * @d原创 2018-02-25 20:34:17 · 232 阅读 · 0 评论 -
19MirrorOfBinaryTree二叉树的镜像
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10原创 2018-02-25 20:56:47 · 179 阅读 · 0 评论 -
23PrintFromTopToBottom从上往下打印二叉树
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。import common.TreeNodeCommon;import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;/** public class TreeNode { int val = 0; TreeNode left原创 2018-03-22 20:05:02 · 358 阅读 · 0 评论 -
25PathInTree二叉树中和为某一值的路径
题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。import common.TreeNodeCommon;import java.util.ArrayList;/** * 基本思路前序遍历外加数组来保存路径 * * 关于把一个arraylist赋值给另外一个arraylist * Arra原创 2018-03-22 21:46:15 · 202 阅读 · 0 评论 -
21MinInStack包含min函数的栈
包含min函数的栈题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。import java.util.Stack;/** * 解题思路: * 1、需要另外开一个栈,记录最新值 * @author LemonLin * @Description :MInInStack21 * @date 2018/3/12-21:20 */public class Mi原创 2018-03-14 11:27:02 · 185 阅读 · 0 评论 -
Duplicate51(数组中重复的数字)
/** * @author LemonLin * @Description :Duplicate51 * @date 2018/9/20-11:29 * * 数组中重复的数字: * 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。 * 也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{...原创 2018-09-26 11:53:26 · 339 阅读 · 0 评论