
剑指Offer
程序猿周周
互联网BUG攻城狮
展开
-
【剑指offer】3.从尾到头打印链表
/***题目描述:*输入一个链表,从尾到头打印链表每个节点的值。*/import java.util.ArrayList;class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}public class Solut...原创 2018-03-10 23:54:43 · 182 阅读 · 0 评论 -
【剑指offer】5.用两个栈实现队列
/***题目描述:*用两个栈来实现一个队列,完成队列的Push和Pop操作。 *队列中的元素为int类型。*/import java.util.Stack;//先进先出与先进后出public class Solution { //保存push进入的元素 Stack<Integer> stack1 = new Stack<Integer>();...原创 2018-03-10 23:57:07 · 242 阅读 · 0 评论 -
【剑指offer】2.空格替换
/***题目描述:*请实现一个函数,将一个字符串中的空格替换成“%20”。*例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。*/public class Solution { //从前向后替换 public String replaceSpace(StringBuffer str) { StringBu...原创 2018-03-10 23:54:10 · 190 阅读 · 0 评论 -
【剑指offer】1.二维数组查找
/***题目描述:*在一个二维数组中,每一行都按照从左到右递增的顺序排序,*每一列都按照从上到下递增的顺序排序。*请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。*/public class Solution { public boolean Find(int [][] array,int target) { int row=0; ...原创 2018-03-10 23:53:06 · 181 阅读 · 0 评论 -
【剑指offer】24二叉树中和为某一值的路径
/***题目描述:*输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。*路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。*/import java.util.ArrayList;class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null;原创 2018-03-26 21:29:05 · 248 阅读 · 0 评论 -
【剑指offer】25复杂链表的复制
/***题目描述:*输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,*另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。*(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)*/class RandomListNode { int label; RandomListNode next = null;原创 2018-03-26 21:29:49 · 231 阅读 · 0 评论 -
【剑指offer】26二叉搜索树与双向链表
/***题目描述:*输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。*要求不能创建任何新的结点,只能调整树中结点指针的指向。*/class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { t原创 2018-03-26 21:30:34 · 206 阅读 · 0 评论 -
【剑指offer】27字符串的排列
/***题目描述:*输入一个字符串,按字典序打印出该字符串中字符的所有排列。*例如输入字符串abc,则打印出由字符a,b,c*所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 */import java.util.*;public class Solution {/** * 1、递归算法 * * 解析:http://www.cnbl原创 2018-03-26 21:31:18 · 216 阅读 · 0 评论 -
【剑指offer】28数组中出现次数超过一半的数字
/***题目描述:*数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。*例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。*由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。*/public class Solution { /*思路一: 数组排序后,如果符合条件的数存在,则一定是数组中间那个数。 (比如原创 2018-03-26 21:31:50 · 236 阅读 · 0 评论 -
【剑指offer】29最小的K个数
/***题目描述:*输入n个整数,找出其中最小的K个数。*例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。*/import java.util.ArrayList;public class Solution { /*思路一:O(N) 利用快速排序中的获取分割(中轴)点位置函数getPartitiion。 基于数组的第k个数字来调整原创 2018-03-26 21:32:34 · 254 阅读 · 0 评论 -
【剑指offer】36两个链表的第一个公共结点
/***输入两个链表,找出它们的第一个公共结点。*/class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}public class Solution { /* 长度相同有公共结点,第一次就遍历到;没有公共结点,走到尾原创 2018-05-01 22:26:36 · 256 阅读 · 0 评论 -
【剑指offer】30连续子数组的最大和
/***题目描述:*HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。*今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,*当向量全为正数的时候,问题很好解决。*但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?*例如:{6,-3,-2,7,-15,1,2,2},*连续子向量的最大和为8(从第0个开始,到第3个为止)。原创 2018-04-26 22:20:42 · 290 阅读 · 0 评论 -
【剑指offer】31整数中1出现的次数
/***题目描述:*求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?*为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,*但是对于后面问题他就没辙了。ACMer希望你们帮帮他,*并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。*/import java.util.*;public class Soluti原创 2018-04-26 22:22:22 · 217 阅读 · 0 评论 -
【剑指offer】32把数组排成最小的数
/***输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。*例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。*/import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;public class Solu原创 2018-04-26 22:23:35 · 235 阅读 · 0 评论 -
【剑指offer】33丑数
/***把只包含因子2、3和5的数称作丑数(Ugly Number)。*例如6、8都是丑数,但14不是,因为它包含因子7。 *习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。*/import java.util.ArrayList;public class Solution { public int GetUglyNumber_Solution(int n){原创 2018-04-26 22:24:23 · 215 阅读 · 0 评论 -
【剑指offer】34第一个只出现一次的字符
/***在一个字符串(1<=字符串长度<=10000,全部由字母组成)中*找到第一个只出现一次的字符,并返回它的位置*/import java.util.HashMap;public class Solution { public int FirstNotRepeatingChar(String str) { char[] chars = str.toCharArray原创 2018-04-26 22:25:14 · 241 阅读 · 0 评论 -
【剑指offer】37数字在排序数组中出现的次数
/***统计一个数字在排序数组中出现的次数。*/public class Solution { //二分查找 public int GetNumberOfK(int [] array , int k) { if (array.length==0) return 0; if (array.length==1){原创 2018-05-05 22:17:43 · 295 阅读 · 0 评论 -
【剑指offer】38二叉树的深度
/***输入一棵二叉树,求该树的深度。*从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,*最长路径的长度为树的深度。*/import java.util.Queue;import java.util.LinkedList;public class Solution { //递归 public int TreeDepth(TreeNode root) {原创 2018-05-05 22:18:37 · 352 阅读 · 0 评论 -
【剑指offer】4.重建二叉树
/***题目描述:*输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。*假设输入的前序遍历和中序遍历的结果中都不含重复的数字。*例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。*///Definition for binary treeclass TreeNode { int val; ...原创 2018-03-10 23:55:27 · 178 阅读 · 0 评论 -
【剑指offer】13调整数组顺序使奇数位于偶数前面
/***题目描述:*输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,*所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。*/public class Solution { //方法一 public void reOrderArray(int [] array) { if(array==nu原创 2018-03-20 16:07:48 · 277 阅读 · 0 评论 -
【剑指offer】6.旋转数组最小的数
/***题目描述:*把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 *输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 *例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 *NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。*/import java.util.ArrayList;public cla...原创 2018-03-10 23:58:00 · 184 阅读 · 0 评论 -
【剑指offer】7.斐波那契数列
/***题目描述:*大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。*n<=39*/import java.util.ArrayList;public class Solution { //方法一:循环 public int Fibonacci(int n) { int preNum=1; int ...原创 2018-03-10 23:58:48 · 224 阅读 · 0 评论 -
【剑指offer】8跳台阶
/***题目描述:*一只青蛙一次可以跳上1级台阶,也可以跳上2级。*求该青蛙跳上一个n级的台阶总共有多少种跳法。*/public class Solution { //斐波那契数的一个应用 public int JumpFloor(int target) { if(target<=0) return 0; i...原创 2018-03-11 22:53:37 · 241 阅读 · 0 评论 -
【剑指offer】9变态跳台阶
/***题目描述:*一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。*求该青蛙跳上一个n级的台阶总共有多少种跳法。*/public class Solution { public int JumpFloor(int target) { return 1<<--target; } public static voi...原创 2018-03-11 22:54:23 · 217 阅读 · 0 评论 -
【剑指offer】10矩形覆盖
/***题目描述:*我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。*请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?*/public class Solution { // 2*n/2*1=n //其实就是一个斐波那契数列,满足公式:d(n) = d(n-1) + d(n-2) public int RectCover(int ...原创 2018-03-11 22:55:00 · 223 阅读 · 0 评论 -
【剑指offer】11二进制中1的个数
/***题目描述:*输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。*/public class Solution { public int NumberOf1(int n) { int count=0; while(n!=0){ count++; n=n&(n-1); ...原创 2018-03-11 22:55:30 · 228 阅读 · 0 评论 -
【剑指offer】14链表中倒数第k个结点
/***题目描述:*输输入一个链表,输出该链表中倒数第k个结点。*/class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}public class Solution { public ListNode Fi...原创 2018-03-18 00:32:00 · 242 阅读 · 0 评论 -
【剑指offer】15反转链表
/***题目描述:*输入一个链表,反转链表后,输出链表的所有元素。*/class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}public class Solution { public ListNode F...原创 2018-03-18 00:32:30 · 278 阅读 · 0 评论 -
【剑指offer】16合并两个排序的链表
/***题目描述:*输入两个单调递增的链表,输出两个链表合成后的链表,*当然我们需要合成后的链表满足单调不减规则。*/class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}public class Solution...原创 2018-03-18 00:33:02 · 230 阅读 · 0 评论 -
【剑指offer】17树的子结构
/***题目描述:*输入两棵二叉树A,B,判断B是不是A的子结构。*(ps:我们约定空树不是任意一个树的子结构)*/public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.va原创 2018-03-18 15:27:04 · 215 阅读 · 0 评论 -
【剑指offer】18二叉树的镜像
/***题目描述:*操作给定的二叉树,将其变换为源二叉树的镜像。 *二叉树的镜像定义:源二叉树 * 8* / \* 6 10* / \ / \* 5 7 9 11* 镜像二叉树* 8* / \* 10原创 2018-03-18 15:27:49 · 261 阅读 · 0 评论 -
【剑指offer】19顺时针打印矩阵
/***题目描述:*输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,*例如,如果输入如下矩阵: *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;public cl原创 2018-03-18 15:28:57 · 235 阅读 · 0 评论 -
【剑指offer】20包含min函数的栈
/***题目描述:*定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。*/import java.util.Stack;public class Solution {/*思路:利用一个辅助栈来存放最小值 栈 3,4,2,5,1 辅助栈 3,3,2,2,1每入栈一次,就与辅助栈顶比较大小,如果小就入栈,如果大就入栈当前的辅助栈顶当出栈时,辅助栈也要出原创 2018-03-18 15:29:38 · 239 阅读 · 0 评论 -
【剑指offer】21栈的压入、弹出序列
/***题目描述:*输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。*假设压入栈的所有数字均不相等。*例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,*但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)*/import java.util.ArrayList;...原创 2018-03-18 15:30:25 · 275 阅读 · 0 评论 -
【剑指offer】12数值的整数次方
/***题目描述:*给定一个double类型的浮点数base和int类型的整数exponent。*求base的exponent次方。*/import java.util.*;public class Solution { //递归 public double Power(double base, int exponent) { int exp=Mat...原创 2018-03-12 22:34:03 · 192 阅读 · 0 评论 -
【剑指offer】22从上往下打印二叉树
/***题目描述:*从上往下打印出二叉树的每个节点,同层节点从左至右打印。*/import java.util.ArrayList;class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { t...原创 2018-03-19 12:54:45 · 222 阅读 · 0 评论 -
【剑指offer】23二叉搜索树的后序遍历序列
/***题目描述:*输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。*如果是则输出Yes,否则输出No。*假设输入的数组的任意两个数字都互不相同。*/class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int va原创 2018-03-19 12:56:19 · 256 阅读 · 0 评论 -
【剑指offer】35数组中的逆序对
/***在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。*输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。* 即输出P%1000000007 */public class Solution { public int InversePairs(int [] array) { if(array==n原创 2018-04-29 23:51:33 · 331 阅读 · 0 评论