剑指offer
SaiW-n_n-
努力,踏实。
展开
-
剑指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 阅读 · 0 评论 -
剑指offer-面试题64-数据流中的中位数
package case64_StreamMedian;import java.util.Comparator;import java.util.PriorityQueue;/** * 题目:如何得到一个数据流中的中位数? * * 如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。 * 如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两原创 2017-05-06 23:49:06 · 384 阅读 · 0 评论 -
剑指offer-堆排序
堆排序,假设需要从小到大排序。利用大顶堆代码实现:package sai.HeapSort;/** * 1,堆排序 * * @author WangSai * */public class HeapSort { public static void main(String[] args) { int[] arr = { 1, 2, 5, 3, 6, 9 };原创 2017-05-06 19:22:16 · 574 阅读 · 0 评论 -
剑指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 阅读 · 0 评论 -
剑指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 阅读 · 0 评论 -
剑指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 阅读 · 0 评论 -
剑指offer-面试题49-把字符串转换成整数
package case49_StringToInt;/** * 题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0 * * @author WangSai * */public class Solution { /** * 把给定的字符串转换成数字。需要考虑的问题: * * 空字符,"","+1原创 2017-05-05 20:30:05 · 610 阅读 · 0 评论 -
剑指offer-面试题37-两个链表的第一个公共结点
package case37_FindFirstCommonNode;import java.util.Stack;/** * 题目:输入两个链表,找出他们的第一个公共结点。 * * @author WangSai * */public class FindFirstCommonNode { /** * 方法1: * * 思路:从单链表的尾节点开始寻找,把两原创 2017-04-24 01:03:12 · 449 阅读 · 0 评论 -
剑指offer-面试题50-树中两个结点的最低公共祖先
树中两个结点的最低公共祖先 代码实现:package case50_GetLastCommonNode;import java.util.ArrayList;import java.util.Iterator;import java.util.Stack;/** * 题目:输入树的两个结点,求他们的最低公共祖先。 * * @author WangSai * */pub原创 2017-05-05 12:47:00 · 908 阅读 · 0 评论 -
剑指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 阅读 · 0 评论 -
剑指offer-面试题15-链表中倒数第k个节点
package case15_FindKthFromEnd;public class FindKthFromEnd { public static void main(String[] args) { ListNode listNode1 = new ListNode(1); ListNode listNode2 = new ListNode(2); ListNode list原创 2017-04-12 21:16:39 · 377 阅读 · 0 评论 -
剑指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 阅读 · 0 评论 -
剑指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 阅读 · 0 评论 -
剑指offer-面试题57-删除链表中重复的结点
结点结构定义:package case57_DeleteDuplicatedListNode;/** * 链表的节点结构定义 * * @author WangSai * */public class ListNode { int data; ListNode next; public ListNode() { } public ListNode(int dat原创 2017-05-04 12:14:41 · 422 阅读 · 0 评论 -
剑指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 阅读 · 0 评论 -
剑指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 阅读 · 0 评论 -
剑指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 阅读 · 0 评论 -
剑指offer-面试题27-二叉搜索树与双向链表
二叉搜索树的节点结构定义:package case27_ConvertBinarySearchTreeToLinkedList;/** * 二叉搜索树结点结构定义 * * @author WangSai * */public class TreeNode { int data; TreeNode lchild; TreeNode rchild; public Tr原创 2017-05-07 17:06:36 · 378 阅读 · 0 评论 -
剑指offer-面试题31-连续子数组的最大和
package case31_FindGreastSumOfSubArray;import java.util.ArrayList;/** * 题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(N)。 * * @author WangSai * */public class FindGreas原创 2017-04-25 14:42:24 · 454 阅读 · 0 评论 -
剑指offer-Java-所有题目索引
剑指offer所有题目索引:剑指offer-面试题02-实现singleton模式剑指offer-面试题03-二维数组中的查找剑指offer-面试题04-替换空格剑指offer-面试题05-从尾到头打印链表剑指offer-面试题06-重建二叉树剑指offer-面试题07-01用两个栈实现队列剑指offer-面试题07-02衍生题目:用两个队列原创 2017-06-15 01:21:38 · 2466 阅读 · 0 评论 -
剑指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 阅读 · 0 评论 -
剑指offer-面试题26-复杂链表的复制
复杂链表的复制 代码实现:package case26_CopyComplexList;/** * 题目:请实现函数ListNode Clone(ListNode root),复制一个复杂链表。在复杂链表中, 每个节点除了有一个Next * 指针指向下一个节点外,还有一个sibling指向链表中的任意结点或者null。 * * @author WangSai * */pub原创 2017-05-05 00:46:40 · 411 阅读 · 0 评论 -
剑指offer-面试题66-矩阵中的路径
/** * Created by apple on 17/6/2. * * @author WangSai * * 题目要求:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。 * 路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。 * 如果一条路径经过原创 2017-06-02 13:59:49 · 548 阅读 · 0 评论 -
剑指offer-面试题67-机器人的运动范围
题目:地上有个m行n列的方格。一个机器人从坐标(0,0)的格子开始移动,它每一次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7=18.但它不能进入方格(35,38),因为3+5+3+8=19.请问该机器人能够达到多少格子?原创 2017-06-04 03:44:53 · 729 阅读 · 0 评论 -
剑指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 · 446 阅读 · 0 评论 -
剑指offer-面试题36-数组中的逆序对
/** * Created by apple on 17/6/2. * 求数组中的逆序对数,时间复杂度为O(nlogn) */public class InversePairs { public static void main(String[] args) { int[] arr = {7, 4, 5, 6, 1, 2}; System.out.p原创 2017-06-02 13:01:49 · 485 阅读 · 0 评论 -
剑指offer-面试题62-序列化二叉树
package case62_SerializeBinaryTrees;/** * 题目:请实现两个函数,分别用来序列化和反序列化二叉树。 * * 思路:根据前序遍历规则完成序列化与反序列化。所谓序列化指的是遍历二叉树为字符串;所谓反序列化指的是依据 * 字符串重新构造成二叉树。依据前序遍历序列来序列化二叉树,因为前序遍历序列是从根结点开始的。当在遍历二叉 * 树时碰到Null指针原创 2017-06-06 21:40:01 · 540 阅读 · 0 评论 -
剑指offer-面试题32-从1到n整数中1出现的次数
解题思路参考自:http://blog.csdn.net/yi_afly/article/details/520125931. 题目描述输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次。2. 题目来源第一次看到是在《剑指Offer》第2版上,面试题32。leetco原创 2017-06-04 17:20:31 · 1133 阅读 · 0 评论 -
剑指offer-归并排序
package Sai.XiaoMI;/** * 2) 归并排序 * * @author WangSai * */public class Solution { /** * @param args */ public static void main(String[] args) { } /** * 2,归并排序,在原数组的基础上对原数组进行排序 *原创 2017-06-01 01:55:53 · 434 阅读 · 0 评论 -
剑指offer-面试题28-字符串的排列
问题输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba思路这是典型的递归求解问题,递归算法有四个特性:必须有可达到的终止条件,否则程序陷入死循环子问题在规模上比原问题小子问题可通过再次递归调用求解子问题的解应能组合成整个问题的解对于字符原创 2017-04-27 18:05:18 · 420 阅读 · 0 评论 -
剑指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 阅读 · 0 评论 -
剑指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 阅读 · 0 评论 -
剑指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 阅读 · 0 评论 -
剑指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 阅读 · 0 评论 -
剑指offer-面试题56-链表中环的入口结点
链表节点结构定义:package case56_EntryNodeOfLoop;/** * 单链表的节点结构定义 * * @author WangSai * */public class ListNode { int data; ListNode next; public ListNode() { } public ListNode(int data) {原创 2017-05-03 23:59:43 · 661 阅读 · 0 评论 -
剑指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 阅读 · 0 评论 -
剑指offer-面试题13-在O(1)时间删除链表节点
package case13_DeleteNodeInList;/** * 题目:给定单链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。 * * 思路: * * 1,要删除的节点是尾节点时,通过遍历,删除该节点。 * * 2,链表中有多个节点,要删除的节点NodeP是中间节点时,通过NodeP的下一个节点覆盖当前节点的内容,并且NodeP指向下一个的下一个节点原创 2017-04-20 20:54:19 · 453 阅读 · 0 评论 -
剑指offer-面试题29-数组中出现次数超过一半的数字
解法一:基于partition函数的O(n)算法数组中有一个数字出现的次数超过了数组长度的一半。如果把这个数组排序,那么排序之后位于数组中间的数字一定就是那个出现次数超过数组长度一半的数字。也就是说,这个数字就是统计学上的中位数,即长度为n 的数组中第n/2 大的数字。这种算法是受快速排序算法的启发。在随机快速排序算法中,我们先在数组中随机选择一个数字,然后调整数组中数字的顺序, 使得原创 2017-04-18 20:35:11 · 582 阅读 · 0 评论 -
剑指offer-面试题55-字符流中第一个不重复的字符
package case55_FirstCharInStream;import java.util.LinkedHashMap;/** * 题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符“go”时,第一个只出现一次的字符是‘g’。 * 当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是‘l’。 * * @aut原创 2017-04-29 12:34:55 · 650 阅读 · 0 评论 -
剑指offer-面试题35-第一个只出现一次的字符
package case35_FindFirstNotRepeatingChar;import java.util.LinkedHashMap;/** * 题目:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出‘b’ * * @author WangSai * */public class FindFirstNotRepeatingChar {原创 2017-04-23 22:38:28 · 555 阅读 · 1 评论