剑指offer
奋斗的小杨
这个作者很懒,什么都没留下…
展开
-
层序打印二叉树
/** * 从上往下打印出二叉树的每个结点,向一层的结点按照从左往右的顺序打印。 * 例如下的二叉树, * 8 * / \ * 6 10 * / \ / \ * 5 7 9 11 * 则依次打印出8、6、10、5、3 、9、11. * * @param root 树的结点 */public static void p...原创 2019-07-03 16:39:40 · 631 阅读 · 0 评论 -
字符串中第一个不重复的字符----java实现
----字符流中第一个不重复的字符----java实现import java.util.ArrayList;import java.util.HashMap;public class First { HashMap<Character,Integer> map = new HashMap<Character,Integer>();//存放字符和其出现的次...原创 2019-08-06 11:54:28 · 229 阅读 · 0 评论 -
剑指offer青蛙跳台阶JAVA
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。public class Solution { public int JumpFloor(int target) { if(target==0){ return 0; } if(tar...原创 2019-08-08 15:31:43 · 157 阅读 · 0 评论 -
链表是否有环,求交点
链表是否有环private static class ListNode { private int val; private ListNode next; public ListNode() { } public ListNode(int val) { this.val = val;...原创 2019-08-06 13:34:19 · 229 阅读 · 0 评论 -
删除链表相邻重复的节点
删除链表相邻重复的节点private static class ListNode { private int val; private ListNode next; public ListNode() { } public ListNode(int val) { this.val = ...原创 2019-08-06 14:29:14 · 450 阅读 · 0 评论 -
两链表相交的第一个公共结点,如果没有找到返回null,方法比较好,考虑了两个链表中有null的情况
一、问题分析(1)两个链表相交,那么两个链表中的节点一定有相同地址。(2)两个链表相交,那么两个链表从相交节点开始到尾节点一定都是相同的节点。(问:为什么? 答:因为每一个节点最多只能有一个下一节点,因此在相交节点之后,链表不可能再分为两个链表)/** * 找两个结点的第一个公共结点,如果没有找到返回null,方法比较好,考虑了两个链表中有null的情况 *...原创 2019-08-02 14:43:30 · 155 阅读 · 0 评论 -
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
private static class BinaryTreeNode { private int val; private BinaryTreeNode left; private BinaryTreeNode right; public BinaryTreeNode() { } public ...原创 2019-08-06 18:12:06 · 168 阅读 · 0 评论 -
判断一个二叉树是否是平衡二叉树
判断是否是平衡二叉树private static class BinaryTreeNode { int val; BinaryTreeNode left; BinaryTreeNode right; public BinaryTreeNode() { } public BinaryTreeN...原创 2019-08-02 15:11:31 · 129 阅读 · 0 评论 -
二叉树的序列化和反序列化
二叉树的序列化和反序列化private static class BinaryTreeNode { private int val; private BinaryTreeNode left; private BinaryTreeNode right; public BinaryTreeNode() { } ...原创 2019-08-07 11:08:11 · 92 阅读 · 0 评论 -
剑指offer-给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方JAVA
public class Solution { public double Power(double base, int exponent) { // 指数为0就返回1 if (exponent == 0) { return 1; } // 求指数的绝对值 long ...原创 2019-08-12 15:56:25 · 644 阅读 · 0 评论 -
剑指offer调整数组顺序使奇数位于偶数前面JAVA
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。public class Solution { public void reOrderArray(int [] array) { int start=0; int end=a...原创 2019-08-12 16:31:41 · 206 阅读 · 0 评论 -
剑指offer输出链表的倒数第k个节点JAVA
输入一个键表,输出该链表中倒数第k个结点* 本题从1开始计数,即链表的尾结点是倒数第1个结点.例如一个链表有6个结点,* 从头结点开始它们的值依次是1、2、3、4、5 6。这个链表的倒数第3个结点是值为4的结点. */ public static ListNode findKthToTail(ListNode head, int k) { // 输入的链表不...原创 2019-06-18 18:04:55 · 144 阅读 · 0 评论 -
剑指offer数组旋转求最小值JAVA
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。import java.util.ArrayList;public class Solution { pub...原创 2019-08-08 15:00:04 · 136 阅读 · 0 评论 -
剑指offer 使用两个栈实现队列先进先出JAVA
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。import java.util.Stack;public class Solution { //入 Stack<Integer> stack1 = new Stack<Integer>(); //出 Stack<Integer> s...原创 2019-06-17 10:31:51 · 531 阅读 · 0 评论 -
剑指offer根据前序遍历和中序遍历重建二叉树JAVA
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。/** * Definition for binary tree * public class TreeNode { * int val; *...原创 2019-08-08 13:42:58 · 516 阅读 · 1 评论 -
找排序数组中k第一次出现的位置
找排序数组中k第一次出现的位置private static int getFirstK(int[] data, int k, int start, int end) { if (data == null || data.length < 1 || start > end) { return -1; } int midIdx = star...原创 2019-06-28 14:14:32 · 483 阅读 · 0 评论 -
判断一个二叉树是不是另一个二叉树的子结构
/** * 输入两棵二叉树A和B,判断B是不是A的子结构。 * 该方法是在A树中找到一个与B树的根节点相等的元素的结点, * 从这个相等的结点开始判断树B是不是树A的子结构,如果找到其的一个就返回, * 否则直到所有的结点都找完为止。 * * @param root1 树A的根结点 * @param root2 树B的根结点 * @return true:树B是树A的子结构,fa...原创 2019-07-30 10:32:32 · 803 阅读 · 0 评论 -
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得得它们的和正好是s。
/** * 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得得它们的和正好是s。 * 如果有多对数字的和等于s,输出任意一对即可。 * * @param data * @param sum * @return */public static List<Integer> findNumbersWithSum(int[] data, int sum) {...原创 2019-08-02 16:50:15 · 2745 阅读 · 0 评论 -
输入一个二叉树,该函数输出它的镜像
/** * 请完成一个函数,输入…个二叉树,该函数输出它的镜像 * * @param node 二叉树的根结点 */public static void mirror(BinaryTreeNode node) { // 如果当前结点不为空则进行操作 if (node != null) { // 下面是交换结点左右两个子树 Bina...原创 2019-07-30 17:28:20 · 946 阅读 · 0 评论 -
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。
/** * 定义栈的数据结构,请在该类型中实现一个能够得到校的最小元素的min函数。 * 在该栈中,调用pop、push 及min的时间复杂度都是0(1) * @param <T> 泛型参数 */public static class StackWithMin<T extends Comparable<T>> { // 数据栈,用...原创 2019-07-30 18:39:58 · 1042 阅读 · 0 评论 -
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
/** * 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 * 【此方法与上一个方法不同,未进行空值判断,对于数组度为0的情况返回的true也于上题不同, * 此方法只是上面一个方法的辅助实现,对于数数组为null和数组长度为0的情况,执行结果并非相同】 * 【也就是说此方法只有数组中有数据的情况下才与上面的方法返回同样的结点, * verifySequenceOfB...原创 2019-07-31 14:09:40 · 948 阅读 · 0 评论 -
输入一棵二叉树和一个整数, 打印出二叉树中结点值的和为输入整数的所有路径。
/** * 输入一棵二叉树和一个整数, 打印出二叉树中结点值的和为输入整数的所有路径。 * 从树的根结点开始往下一直到叶销点所经过的结点形成一条路径。 * * @param root 树的根结点 * @param expectedSum 要求的路径和 */public static void findPath(BinaryTreeNode root, int ex...原创 2019-07-31 14:46:12 · 807 阅读 · 0 评论 -
将数组data中start到end之间的数字反转
/** * 将data中start到end之间的数字反转 * * @param data * @param start * @param end */public static void reverse(char[] data, int start, int end) { if (data == null || data.length < 1 || start <...原创 2019-08-05 14:48:46 · 274 阅读 · 0 评论 -
从扑克牌中随机抽5张牌,判断是不是一个顺子, 即这5张牌是不是连续的。
/** * 题目:从扑克牌中随机抽5张牌,判断是不是一个顺子, 即这5张牌是不是连续的。 * 2~10为数字本身, A为1。 J为11、Q为12、 k为13。小王可以看成任意数字。 * @param numbers * @return */public static boolean isContinuous(int[] numbers) { if (numbers...原创 2019-08-05 15:48:37 · 1037 阅读 · 0 评论 -
出圈约瑟夫问题
有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数….这样下去….直到剩下最后一个小朋友,求最后一个小朋友的编号(注:小朋友的编号是从0到n-1) public static int lastRemaining(int n, int m) {...原创 2019-08-05 16:54:48 · 298 阅读 · 0 评论 -
在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的, * 但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 public stati
/** * 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的, * 但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 * 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者。 * 参考基数排序思想 * @param number * @return */ pub...原创 2019-08-05 19:29:29 · 1267 阅读 · 1 评论 -
剑指offer头插法反转链表JAVA实现
头插法实现链表的反转定义一个新的root节点作为新链表的头,然后定义一个next记录当前节点的next域,然后遍历链表,next记录head的下一节点,头节点指向root的next节点,root的next节点执相头节点,然后再把头节点后移。初始状态一次操作public class Demo{ class Node{ ...原创 2019-06-11 16:21:49 · 2424 阅读 · 0 评论