剑指offer
wmingstar
进阶的小码农
展开
-
剑指Offer-15
题目:输入一个链表,输出该链表中倒数第K个结点。实现//coding = java public class Solution15 { public Node findKthToTail(Node head,int k){ if(head==null){ throw new RuntimeException("链表为空"); }原创 2017-05-26 15:45:17 · 231 阅读 · 0 评论 -
剑指Offer-34
题目:我们把只包含因子 2,3,5的数称为丑数,求按从小到大的顺序的第1500个丑数。(习惯上把 1 当作第一个丑数)实现public class Solution34 { public static int getUglyNum(int k){ if(k<1){ return 0; } int[] ugly_nums =原创 2017-06-11 16:41:07 · 177 阅读 · 0 评论 -
剑指Offer-31
题目:实现// coding = javapublic class Solution31 { public static int findGreatSum(int[] nums){ if(nums==null || nums.length<1){ return 0; } int cur_sum = 0;原创 2017-06-07 09:10:50 · 212 阅读 · 0 评论 -
剑指Offer-29
题目:数组中出现次数超过一半的数字。实现:public class Solution29 { public static int findMoreThanHalf(int[] nums){ if(nums==null || nums.length<1){ System.out.println("数组为空"); return 0;原创 2017-06-06 10:12:02 · 250 阅读 · 0 评论 -
剑指Offer-25
题目:打印二叉树中和为某一值的所有路径 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。 (从树的根结点开始往下一直到叶节点所经过的结点形成的一条路径)实现// coding = javapublic class Solution25 { public static void findPath(BinaryTreeNode root,int expect_sum)原创 2017-06-02 14:27:51 · 233 阅读 · 0 评论 -
剑指Offer-11
题目:实现函数 double Power(double base,int exponent) 求 base 的 exponent 次方。 (注意考虑边界条件 : base 为0 或者 exponent 小于 1 为负数)实现// coding = javapublic class Solution11 { public static double power(double b原创 2017-05-25 08:43:41 · 209 阅读 · 0 评论 -
剑指Offer-47
题目:写一个函数,求两个整数之和,要求在函数体内不得使用 + - * /实现public class Solution47 { public static int sumOfNum(int num1,int num2){ int sum =0; int carry = 0; do{ sum = num1^num2;原创 2017-08-31 09:48:03 · 245 阅读 · 0 评论 -
剑指Offer-52
题目:给定一个数组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 Solution52 { public static int[] multiply(int[] nums){ if(nums==null || nums.l原创 2017-08-31 11:00:10 · 294 阅读 · 0 评论 -
剑指Offer-10
题目:实现一个函数,输入一个整数,输出该二进制表示中 1 的个数。 同类的题: (1)P判断一个数是否是 2 的整数次方 。 (当 是 2 的整数次方时,只有一位为 1) (2)判断两个数的二进制表示中有几位是相异(先异或 再求 1 的个数)。实现public class Solution10 { //这种解法是错的,当输入为 负数时,右移时,高位补1,会陷入死循环 pub原创 2017-05-24 15:05:52 · 179 阅读 · 0 评论 -
剑指Offer-9
题目:写一个函数,输入 n ,求斐波那契数列的第n项实现public class Solution9 { //直接递归,,当递归深度较深时,效率很低 public int Fibonacci1(int n){ if(n<0){ throw new RuntimeException("n 小于 0,输入不合法"); }原创 2017-05-24 14:43:21 · 181 阅读 · 0 评论 -
剑指Offer-6
题目:重建二叉树 输入某个二叉树的前序遍历和中序遍历的结果,请重建出该二叉树,假设 输入的前序遍历和中序遍历的结果中都不含重复的数字。实现public class Solution6 { public static BinaryTreeNode treeConstruct(int[] preorder, int[] inorder) { // 输入的合法性判断,两个数组都不能原创 2017-05-23 09:27:54 · 225 阅读 · 0 评论 -
剑指Offer-41
题目1:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得它们的和正好是S,如果有多对,输出任意一对即可。题目2:输入一个整数s,打印出所有和为s的连续整数序列。(至少两个数)实现public class Solution41 { public static void findNums1(int[] nums,int s){ if(nums==null || num原创 2017-08-31 09:08:53 · 277 阅读 · 0 评论 -
剑指Offer-51
题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。实现public class Solution51 { //方法一 遍历数组,将数组放入hashmap,键为数字,值为出现的次数 public void findDuplicateNums1(int[] num原创 2017-08-31 10:44:33 · 292 阅读 · 0 评论 -
剑指Offer-56
题目:一个链表中包含环,如何找出环的入口结点?实现public class Solution56 { public static Node findEntryNode(Node head){ if(head==null){ return null; } Node slow = head; Node qui原创 2017-08-31 11:28:05 · 341 阅读 · 0 评论 -
剑指Offer-13
题目:实现原创 2017-05-25 09:57:52 · 292 阅读 · 0 评论 -
剑指Offer-63
题目:给定一棵二叉搜索树,请找出其中的第k大的结点。实现public class Solution63 { public static BinaryTreeNode kthNode(BinaryTreeNode root,int k){ if(root==null || k<1){ return null; } List原创 2017-09-01 10:08:16 · 327 阅读 · 0 评论 -
剑指Offer-62
题目:请实现两个函数,分别用来序列化和反序列化二叉树。实现public class Solution62 { public static void serialize(BinaryTreeNode root, List<Integer> result) { Queue<BinaryTreeNode> queue = new ArrayDeque<BinaryTreeNode>(原创 2017-09-01 09:33:54 · 296 阅读 · 0 评论 -
剑指Offer-23
题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。实现// coding = javapublic class Solution23 { public static void printFromTopToBottom(BinaryTreeNode root){ Queue queue = new ArrayDeque<BinaryTreeNode>(原创 2017-06-02 10:02:10 · 180 阅读 · 0 评论 -
剑指Offer-62
题目:请实现两个函数,分别用来序列化和反序列化二叉树。实现public class Solution62 { public static void serialize(BinaryTreeNode root, List<Integer> result) { Queue<BinaryTreeNode> queue = new Ar...原创 2018-05-06 21:32:30 · 272 阅读 · 0 评论 -
剑指Offer-61
题目实现public class Solution61 { public static void printTree(BinaryTreeNode root) { if (root == null) { return; } List<BinaryTreeNode> current = new LinkedList<>()原创 2017-08-31 16:37:47 · 310 阅读 · 2 评论 -
剑指Offer-60
题目从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印一行。实现public class Solution60 { public static void printTree(BinaryTreeNode root) { if (root == null) { return; } Queue<BinaryT原创 2017-08-31 16:24:02 · 284 阅读 · 0 评论 -
剑指Offer-59
题目:请实现一个函数来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。实现public class Solution59 { public static boolean isSymmetrical2(BinaryTreeNode root) { return isSymmetrical2(root, root); } private st原创 2017-08-31 15:37:28 · 269 阅读 · 0 评论 -
剑指Offer-58
题目:给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父节点的指针。实现public class Solution58 { public static BinaryTreeNode2 getNext(BinaryTreeNode2 node) { if (node == null) {原创 2017-08-31 15:13:05 · 331 阅读 · 0 评论 -
剑指Offer-57
题目:在一个排序的链表中,如何删除重复的结点?实现public class Solution57 { public static Node deleteDuplicateNode(Node head){ if (head == null) { return null; }// // 只有一个结点// if原创 2017-08-31 14:37:10 · 314 阅读 · 0 评论 -
剑指Offer-3
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 输入:二维数组 整数 输出:boolean实现//coding = javapublic class Solution3 { public static boolean findNum(int[][] da原创 2017-05-10 09:53:56 · 425 阅读 · 0 评论 -
剑指Offer-40
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。 找出只出现一次的数字,要求时间复杂度是 O(n) 空间复杂度是 O(1)。实现// coding = javapublic class Solution40 { //用 Hashmap 的方式,时间复杂度为 O(n),但是空间复杂度为 O(n) public static void findNums1(int[]原创 2017-06-13 15:05:40 · 288 阅读 · 0 评论 -
剑指Offer-39
题目:输入一颗二叉树的根节点,求该树的深度(从根结点到叶节点依次经过的结点(含 根、叶结点)形成树的一条路径,最长路径的长度为树的深度); 输入一颗二叉树,判断该树 是不是平衡树。实现// coding = javapublic class Solution39 { // 求树的深度 public static int treeDepth(BinaryTreeNode root)原创 2017-06-13 14:45:40 · 320 阅读 · 0 评论 -
剑指Offer-26
题目:请实现函数,使其可以复制一个复杂链表。 在复杂链表中,每个结点除了有一个 m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任意结点或者 null。实现// coding = java public class Solution26 { // 复杂链表结点 public static class ComplexListNode {原创 2017-06-05 09:46:11 · 343 阅读 · 0 评论 -
剑指Offer-19
题目:完成一个函数,输入一个二叉树,输出它的镜像。实现//coding = javapublic class Solution19 { public void mirrorTree(BinaryTreeNode root){ if(root==null){ return; } BinaryTreeNode tmp =原创 2017-05-27 09:44:55 · 242 阅读 · 0 评论 -
剑指Offer-18
题目:输入两棵树 A 和 B,判断 B 是不是 A 的子结构。实现//coding = javapublic class Solution18 { public static boolean hasSubTree(BinaryTreeNode root1,BinaryTreeNode root2){ boolean result = false; if(ro原创 2017-05-27 09:26:39 · 353 阅读 · 0 评论 -
剑指Offer-16
题目:反转链表,实现一个函数,输入一个链表的头节点,反转该链表,输出反转后链表的头节点。实现//coding = javapublic class Solution16 { public Node reverseList(Node head){ if(head==null){ return null; } if(hea原创 2017-05-26 16:11:02 · 203 阅读 · 0 评论 -
剑指Offer-17
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。实现// coding = javapublic class Solution17 { //法1 非递归实现 public Node mergeList1(Node head1,Node head2){ if(head1==null && head2==null){原创 2017-05-27 09:04:11 · 412 阅读 · 0 评论 -
剑指Offer-14
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分, 所有偶数位于数组的后半部分。实现//coding = java public class Solution14 { public static int[] Recorder(int[] nums){ if(nums == null || nums.length==0){原创 2017-05-26 15:37:08 · 200 阅读 · 0 评论 -
剑指Offer-12
题目:输入数字 n 按顺序打印出从 1 到最大的 n 位十进制数, 比如输入 3,则打印出 1 、2、3、 …..一直到 999。实现// coding = javapublic class Solution12 { public static void printOneToNDigits(int n) { // 输入的数字不能为小于1 if (n < 1)原创 2017-05-25 09:24:43 · 258 阅读 · 0 评论 -
剑指Offer-8
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转, 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。//coding =javapublic class Solution8 { public static int findMinNum(int[] nums){ if(nums==null || nums.length<1){原创 2017-05-23 16:23:45 · 231 阅读 · 0 评论 -
剑指Offer-7
题目:用两个栈实现队列实现//coding = javapublic class SQueue { private Stack<Integer> stack1 = new Stack(); private Stack<Integer> stack2 = new Stack(); public void add(int data){ stack1.add(da原创 2017-05-23 15:56:27 · 170 阅读 · 0 评论 -
剑指Offer-5
题目:输入一个链表的头节点,从头到尾反过来打印出每个节点的值。实现//coding = javaimport java.util.Stack;public class Solution5 { // public static void printListReversinglyUsingStack(Node head){ if(head==null){原创 2017-05-22 14:39:31 · 206 阅读 · 0 评论 -
剑指Offer-20
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每个数字。实现// coding = javapublic class Solution20 { public static void printMatrixClockWisely(int[][] numbers) { // 输入的参数不能为空 if (numbers == null) {原创 2017-06-01 09:12:30 · 343 阅读 · 0 评论 -
剑指Offer-21
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min函数,在该栈中调用 min push pop 的时间复杂度都是 O(1)。实现//coding = javapublic class Solution21 { //仅仅是声明了变量(引用),还需创建实例,使这两个引用指向对应的实例 private Stack<Integer> dataStack;原创 2017-06-01 09:18:06 · 401 阅读 · 0 评论 -
剑指Offer-22
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。 假设栈的所有数字均不相等实现//coding = javapublic class Solution22 { public static boolean isPopOrder(int[] push,int[] pop){ boolean result = false; if(原创 2017-06-01 09:37:05 · 409 阅读 · 0 评论