剑指Offer
文章平均质量分 61
Wo们的征途是星辰大海
这个作者很懒,什么都没留下…
展开
-
面试题3:二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,请完成一个函数,输入这样一个数组和一个整数,判断数组中是否含有该整数public class Find { public static void main(String[] args) { int[][] a = new int[][]{ {1,2,8,9}, {原创 2015-08-30 15:37:49 · 380 阅读 · 0 评论 -
面试题19:二叉树镜像
题目:完成一个函数,输入一个二叉树,该函数输入它的镜像思路:递归即可public class MirrorRecursively { public static void mirrorRecursively(Node root){ if(root==null) return; Node temp = root.getLeft(); root.setLeft原创 2015-08-31 15:14:20 · 324 阅读 · 0 评论 -
面试题15:链表中倒数第K个节点
题目:输入一个链表,输出该链表倒数第K个节点的值思路:两个指针扫一遍就行了public class FindKthToTail { public static void main(String[] args) { Node[] nodes = new Node[10]; for(int i=0;i<10;i++){ nodes[i] = new Node(i);原创 2015-08-31 10:22:50 · 210 阅读 · 0 评论 -
面试题14:调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数调整该数组中的数字的顺序,使得所有奇数位于数组的前半部门,偶数位于后半部门思路:类似快排的思路public class ReorderOddEven { public static void main(String[] args) { int[] a ={1,2,3,4,5,6,7,8}; reorderOddEven(a); Sys原创 2015-08-31 09:54:49 · 314 阅读 · 0 评论 -
面试题17:合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是按照递增排序的思路:递归可解public class Merge { public static Node merge(Node headA,Node headB){ if(headA==null) return headB; else if(headB==null) return原创 2015-08-31 11:29:38 · 269 阅读 · 0 评论 -
面试题20:顺时针打印矩形
题目:输入一个矩形,按照从外向里以顺时针的顺序依次打印出每个数字思路:打印即可public class PrintMatrixClockwisely { public static void main(String[] args) { int[][] a = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12} };原创 2015-09-01 15:52:20 · 421 阅读 · 0 评论 -
面试题:23从上往下打印二叉树
题目:从上往下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印思路:BFSpublic class PrintFromTopToBottom { public static void printFromTopToBottom(Node root){ if(root==null) return; Queue queue = new ArrayDequ原创 2015-09-01 16:57:27 · 272 阅读 · 0 评论 -
面试题25:二叉树中和为某一值得路径
题目:输入一颗二叉树和一个整数,打印出二叉树中节点值得和为输入整数的所有路径分析:递归public class FindPath { public static void findPath(Node root,int target,ArrayList toPrint,int now){ if(root==null) return; now = now+roo原创 2015-09-01 20:55:00 · 322 阅读 · 0 评论 -
面试题22:栈的压入弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,判断第二个序列是否在该栈的弹出序列,假设压入栈的所有数字均不相等思路:用一个辅助栈即可mport java.util.Stack;public class IsPopOrder { public static void main(String[] args) { int[] a= {1,2,3,4,5}; in原创 2015-09-01 16:24:52 · 277 阅读 · 0 评论 -
面试题21:包含min函数的栈
题目:定义栈的数据结构,在该类型中实现一个能够得到的栈的最小元素的min函数.在该栈中,调用min,push,pop都是O(1)的复杂度import java.util.Stack;public class StackWithMin { private Stack dataStack; private Stack minStack; public StackWithMi原创 2015-09-01 16:03:23 · 260 阅读 · 0 评论 -
面试题24:二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后续遍历结果,如果是则返回true,不是返回false,假设输入的数组的任意两个数字都不相同思路:递归public class VerifySequenceOfBST { public static boolean verifySequenceOfBST(int[] source,int start,int end){原创 2015-09-01 20:39:15 · 303 阅读 · 0 评论 -
面试题16:翻转链表
题目:定义一个函数,输入一个链表的头结点,反转链表并输出反转后的链表头结点思路:三个指针,pre指向已经完成的链表头结点,middle指向要操作的结点,next指向没操作的节点public class ReverseList { public static Node reverseList(Node head){ if(head==null) return nul原创 2015-08-31 11:12:43 · 288 阅读 · 0 评论 -
面试题13:在O(1)时间删除链表节点
题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点.public class DeleteNode { /* * 要求时间复杂度O(1),只要被删除节点不是最后一个都可以O(1) * 如果是最后一个,并且链表中不止一个节点,依旧需要O(n)的复杂度、 * 但是整体是O(1) * 这里头结点是无意义的. */ public s原创 2015-08-31 09:40:10 · 381 阅读 · 0 评论 -
面试题12:打印1到最大的n位数
题目:输入一个数字m,按顺序打印从1到最大的n位十进制.思路:打印就行了,考虑大数问题,可以用字符数组模拟加法,也可以使用全排列解法1:字符数组模拟加法public class PrintToMaxOfNDight_1 { public static void print_1(int n){ if(n<0){ return; } char[] toP原创 2015-08-30 20:40:43 · 308 阅读 · 0 评论 -
面试题5:从尾到头打印链表
题目:输入一个链表的头结点,从尾到头反过来打印出每个节点分析:利用栈即可解决import java.util.Stack;public class ReverseLinkedList { public static void main(String[] args) { Node[] nodes = new Node[10]; for(int i=0;i<10;i原创 2015-08-30 15:56:34 · 302 阅读 · 0 评论 -
面试题8:旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的尾部,我们称之为数组的旋转,输入一个递增排序的数组的旋转,输出旋转数组的最小元素思路:直接扫一遍O(n) 利用二分搜索的思想O(logn)->这种搜索对特例要特殊处理public class GetMin { public static void main(String[] args) { int[]a ={1,0,1,1,原创 2015-08-30 19:29:27 · 227 阅读 · 0 评论 -
面试题11:数值的整数次方
题目:实现函数double Power(double base,int exponent)求base得exponent次方分析:正常算,考虑负数情况.public class Power { public static double power(double base,int exponent){ double result = 1; if(exponent>0){原创 2015-08-30 20:13:57 · 271 阅读 · 0 评论 -
面试题2:实现一个Singleton模式
public class Singleton { //内部持有Singleton唯一引用 private static Singleton instance; //构造器私有化,防止外部new对象 private Singleton(){} //利用锁加双重判断生成单例对象实例,并返回 public static Singleton getInstance(){ if原创 2015-08-30 15:21:01 · 387 阅读 · 0 评论 -
面试题9:斐波那契数列
题目:对一个函数n,求斐波那契数列的第n项.思路:直接递归重复计算很多,直接循环就可以解public class Fibonacci { public static void main(String[] args) { for(int i=0;i<50;i++) System.out.println(fibonacci(i)); } public static lo原创 2015-08-30 19:37:11 · 299 阅读 · 0 评论 -
面试题4:替换空格
题目:实现一个函数,把字符串中的每个空格替换成"%20"public class ReplaceBlank { public static void main(String[] args) { System.out.println(toAns("We are Happy")); System.out.println(toAns("We are Hap ")); Sys原创 2015-08-30 15:48:05 · 300 阅读 · 0 评论 -
面试题10:二进制中1的个数
题目:请实现一个函数,输入一个整数,输出该数二进制补码表示中1的个数分析:位运算,扫一遍二进制字符串两种都可以public class NumberOf1 { public static void main(String[] args) { System.out.println(numberOf1_1(9)); System.out.println(numberOf1_原创 2015-08-30 19:52:37 · 240 阅读 · 0 评论 -
面试题18:树的子结构
题目:输入两棵二叉树A,B判断B是不是A的子结构.思路:递归遍历A,找到节点相同点后,再递归查看即可public class HasSubTree { public static boolean hasSubTree(Node p,Node c){ boolean ans = false; if(p!=null && c!=null){ if(p.getDa原创 2015-08-31 14:47:07 · 291 阅读 · 0 评论 -
面试题6:重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.思路:递归即可public class BuildTree { public static void main(String[] args) { int[] first = {1,2,4,7,3,5,6,8}; int[] middle = {4,7,2,1,5,3,8,6}; Node root =原创 2015-08-30 16:22:33 · 283 阅读 · 0 评论 -
面试题7:用两个栈实现队列
题目:用两个栈实现一个队列.实现两个函数:appendTail和deleteHead思路:画图分析一下即可import java.util.Stack;public class Stack2Queue { private Stack s1; private Stack s2; private int size; public Stack2Queue() {原创 2015-08-30 16:31:59 · 288 阅读 · 0 评论 -
面试题26:复杂链表复制
题目:实现一个函数,复制一个复杂链表,复杂链表中,每个节点除了有一个next指针指向下一个节点外,还有一个sibling指针指向链表中的任意节点或null节点import java.util.HashMap;import java.util.Map;public class Clone { public static Node clone(Node head){原创 2015-09-01 21:12:39 · 277 阅读 · 0 评论