剑指offer
obession
这个作者很懒,什么都没留下…
展开
-
剑指offer-重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。import java.util.Arrays;public class 重建二叉树 { public class T原创 2017-06-02 09:25:51 · 201 阅读 · 0 评论 -
剑指Offer--删除链表中重复的节点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5package 从50题数组中重复的数字开始;import 从50题数组中重复的数字开始.链表中环的入口节点.ListNode;public class 删除链表中重复的节点 { publi原创 2017-08-18 16:48:51 · 265 阅读 · 0 评论 -
剑指offer--二叉树的深度--层次遍历/BFS
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。第一种方法递归;第二种方法用BFS层次遍历二叉树--见 剑指offer--从上往下打印二叉树--层次遍历、广度优先搜索广度优先搜索--迷宫最短路径--队列import java.util.LinkedList;import java.ut原创 2017-08-11 11:37:48 · 639 阅读 · 0 评论 -
剑指offer--从上往下打印二叉树--层次遍历、广度优先搜索
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。二叉树的层次遍历,广度优先搜索,用队列实现即可;以前有个BFS的写法思路:点这。。import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;/*层次遍历算法 * 实际就是广度优先BFS*/p原创 2017-07-09 20:20:41 · 330 阅读 · 0 评论 -
剑指offer--二叉树的深度
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。原创 2017-08-11 11:05:02 · 137 阅读 · 0 评论 -
剑指Offer--数组在排序数组中出现的次数--二分查找的应用
统计一个数字在排序数组中出现的次数。package 剑指offerfrom27题;import java.util.HashMap;public class 数组在排序数组中出现的次数 { public static void main(String[] args) { // TODO Auto-generated method stub// int原创 2017-08-10 16:15:49 · 160 阅读 · 0 评论 -
剑指Offer--数组中的逆序对--归并排序!
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size对于%75的数据,size对于%100的数据,size示例1输入原创 2017-08-09 13:49:34 · 194 阅读 · 0 评论 -
剑指offer--两个链表的第一个公共节点
题目描述输入两个链表,找出它们的第一个公共结点。public class 两个链表的第一个公共节点 { class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public static void main(String[] ar原创 2017-08-10 14:51:40 · 169 阅读 · 0 评论 -
剑指offer--链表中环的入口结点
[编程题]链表中环的入口结点一个链表中包含环,请找出该链表的环的入口结点。参考:点击打开链接public class 链表中环的入口节点 { public static class ListNode { int val; ListNode next = null; ListNode(int val) { this.原创 2017-08-17 15:07:12 · 179 阅读 · 0 评论 -
剑指offer--字符流中第一个不重复的字符
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。输出描述:如果当前字符流没有存在出现一次的字符,返回#字符。public class Solution { int[] hashtable=new原创 2017-08-17 10:13:20 · 212 阅读 · 0 评论 -
剑指offer--表示数值的字符串
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。方法一:评论区答案;正则表达式 public class Solution { public boolean isNumeri原创 2017-08-17 09:48:34 · 183 阅读 · 0 评论 -
剑指offer--正则表达式
-实在是不会,先放一放题目描述请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配public class 正则表达式匹配原创 2017-08-16 16:15:50 · 248 阅读 · 0 评论 -
剑指offer--构建乘法数组
题目描述给定一个数组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]。不能使用除法public class 构建乘积数组 { public static void main(String[] args) { // TODO Auto-gene原创 2017-08-16 16:02:26 · 209 阅读 · 0 评论 -
剑指offer--数组中重复的数字
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。public class 数组中重复的数字开始 { public static void main(Str原创 2017-08-16 15:36:50 · 221 阅读 · 0 评论 -
剑指offer--二叉树的下一个节点
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。package 从50题数组中重复的数字开始;public class 二叉树的下一个节点 { public class TreeLinkNode { int val; TreeLinkNode left = nu原创 2017-08-19 10:23:11 · 184 阅读 · 0 评论 -
剑指offer--对称的二叉树(递归)
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。递归入口,被遍历节点的左右节点;处理情况:左右只有一个空--false;左右都不空--比较值;左右都空--truepublic class 对称的二叉树 { class TreeNode { int val = 0; Tree原创 2017-08-19 11:42:17 · 220 阅读 · 0 评论 -
剑指offer-替换空格
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。public class 替换空格 { public static void main(String[] args) { // TODO Auto-generated method stub }原创 2017-05-31 18:12:35 · 178 阅读 · 0 评论 -
扑克牌顺子
LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面原创 2017-08-15 16:28:59 · 162 阅读 · 0 评论 -
左旋转字符串
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!public class 坐旋转字符串 { public static voi原创 2017-08-15 13:40:18 · 130 阅读 · 0 评论 -
剑指offer--翻转单词顺序列
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?public原创 2017-08-15 11:04:15 · 141 阅读 · 0 评论 -
和为S的连续正数序列
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数序列。原创 2017-08-14 20:59:17 · 204 阅读 · 0 评论 -
剑指offer--和为S的两个数字
题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。import java.util.ArrayList;public class 和为S的两个数 { public static void main(String[] args) { // TODO Auto-generated meth原创 2017-08-14 17:29:07 · 155 阅读 · 0 评论 -
剑指offer--数组中只出现一次的数字--异或运算、二进制运用
题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。第一种方法:用hashmap..第二种方法:用异或运算;因为相同的两个数字异或肯定全为0,只有那两个只出现一次的数字异或的结果不会是0000;所以先把所有数全部参与异或运算。最后得到个带1的二进制结果,这些1就是那两个数字不一样的位置;如果根据这两个不一样的位置(位数),把数原创 2017-08-14 17:07:50 · 280 阅读 · 0 评论 -
剑指Offer--最小的k个数
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路一:利用parition函数,分割找到第k个位置,那么k位置之前的就是k个未排序的小数,参看快速排序;import java.util.ArrayList;/*快速排序*/public class 最小的k个数 { public sta原创 2017-08-05 12:07:44 · 222 阅读 · 0 评论 -
剑指offer--平衡二叉树--AVL树
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。概念:Self-Balancing Binary Search Tree;要么是一颗空树,要么是左子树和右子树都是平衡二叉树,且左右子树深度之差 绝对值不超过1.那么二叉树上节点的左子树减去右子树深度的值为平衡因子 BF,BF只能为-1,0,1.那么判断二叉树不平衡,只要有一个节点的平衡因子绝对值大于1,就是不平衡的。原创 2017-08-11 13:48:06 · 215 阅读 · 0 评论 -
剑指Offer--二叉搜索树的第K个节点-不会
题目描述给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。public class Solution { public int count = 0; TreeNode KthNode(TreeNode pRoot, int k) { if(pRoot !=原创 2017-08-19 16:26:25 · 190 阅读 · 0 评论 -
剑指offer--序列化二叉树
题目描述请实现两个函数,分别用来序列化和反序列化二叉树一:二叉树序列化(持久化)二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于 先序、中序、后序、按层 的二叉树遍历方式来进行修改。原理都是一样的(即遍历顺序不同而已,对每个结点的处理都是一样的),序列化的结果是一个字符串,序列化原创 2017-08-19 15:26:40 · 181 阅读 · 0 评论 -
剑指offer--把二叉树打印成多行
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。package 从50题数组中重复的数字开始;import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;public class 把二叉树打印成多行 { public static class TreeNode原创 2017-08-19 14:33:42 · 224 阅读 · 0 评论 -
剑指offer--安之字顺序打印二叉树
安之字顺序打印二叉树:题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;public c原创 2017-08-19 13:02:54 · 213 阅读 · 0 评论 -
不用加减乘除做加法
题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。public class 不用加减乘除做加法 { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(Add(2, 4)); }原创 2017-08-16 10:16:57 · 157 阅读 · 0 评论 -
求1加到n
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。public class 求1加到n { public static void main(String[] args) { // TODO Auto-generated method stub System.out.prin原创 2017-08-16 09:59:15 · 919 阅读 · 0 评论 -
剑指offer-用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。import java.util.Stack;/*思路:要输入输出实现FIFO,那入栈1之后再倒入栈2*/public class 两个栈实现一个队列 { public static void main(String[] args) { // TODO Auto-ge原创 2017-06-02 10:19:55 · 221 阅读 · 0 评论 -
剑指offer--二叉树中和为某一值的路径
题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二叉树的遍历,深度搜索DFS; 模板import java.util.ArrayList;public class 二叉树中和为某一值的路径 { static class TreeNode { int val =原创 2017-07-11 16:19:25 · 172 阅读 · 0 评论 -
剑指offer--链表中倒数第K个节点
题目描述输入一个链表,输出该链表中倒数第k个结点。思路是:用两个指针作为量尺。。移到最后第一个指针就是倒数的K的节点public class 链表中倒数第K个节点 { static class ListNode { int val; ListNode next = null; ListNode(int原创 2017-06-22 11:35:24 · 180 阅读 · 0 评论 -
剑指offer--调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。public class 调整数组顺序使技术位于偶数前面 { public static void main(String[] args) { // TODO Auto-generated method st原创 2017-06-22 10:39:07 · 185 阅读 · 0 评论 -
剑指offer-数值的整数次方-二分快速幂-位移代替除2
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方这道题要考虑到指数的正负,0的情况;底数为0的情况;然后是快速二次幂的解法;然后是位运算;public class 数值的整数次方 { public static void main(String[] args) { // TODO Aut原创 2017-06-22 10:00:36 · 296 阅读 · 0 评论 -
剑指offer--二进制中的1的个数--补码
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。首先复习一下补码。。这道题考的位运算 --> 位运算计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。在计算机系统中,数值一律用补码来表示和存储。正数补码就是原码;如+9原创 2017-06-21 20:01:50 · 612 阅读 · 1 评论 -
剑指offer--二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。二叉搜索树:根节点的值大于左节点的值,小于右节点的值;后序遍历:按照左右根节点的顺序遍历二叉树;/*首先,二叉搜索树,左子树值小于根节点,有子树值大于根节点 * 然后后序遍历是左右根的顺序----递归*/public原创 2017-07-11 09:12:08 · 165 阅读 · 0 评论 -
剑指offer--矩形覆盖--简单DP
题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? public static int dp[]; public static void main(String[] args) { // TODO Auto-generated method stub } public stati原创 2017-06-21 10:32:22 · 306 阅读 · 0 评论 -
剑指offer-变天跳台阶-dp
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。public class 变态跳台阶 { public static int dp[]; public static void main(String[] args) { // TODO Auto-generated method stub }原创 2017-06-21 10:08:01 · 319 阅读 · 0 评论