
剑指offer-java
Crystal_ting
个人博客 limengting.site
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
《剑指offer》3.数组中重复的数字
原题链接:3.数组中重复的数字题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。思路: 找数组中其中一个重复的数字/全部重复数字:①HashMap ②如果n个数字...原创 2018-03-22 23:23:21 · 285 阅读 · 0 评论 -
面试常见算法4:栈和队列
1、数组/栈/队列间的转换:1.1 固定数组实现栈结构:package sword_to_offer_stack_queue;public class UseArrayBuildArrayStack { // 固定数组实现栈 // 准备一个变量index,数组的大小设置为为栈的大小为initSize // 当要加一个数,index的含义为如果新来一个...原创 2018-04-18 16:48:27 · 470 阅读 · 1 评论 -
《剑指offer》把一棵二叉树打印成多行
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。import java.util.ArrayList;import java.util.Queue;import java.util.LinkedList;/*public class TreeNode { int val = 0; TreeNode left = null; Tree...原创 2018-04-30 12:21:19 · 251 阅读 · 0 评论 -
《剑指offer》二叉树的镜像
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义: 源二叉树: 8 / \ 6 10 / \ / \ 5 7 9 11镜像二叉树: 8 / \ 10 6 ...原创 2018-04-30 13:38:06 · 218 阅读 · 0 评论 -
《剑指offer》对称的二叉树
题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { ...原创 2018-04-30 17:40:42 · 205 阅读 · 0 评论 -
《剑指offer》树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val原创 2018-05-02 13:57:35 · 253 阅读 · 0 评论 -
《剑指offer》二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { if (sequence == null || sequence...原创 2018-05-02 14:42:38 · 259 阅读 · 0 评论 -
[4]《剑指offer》二叉树中和为某一值的路径
题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。import java.util.ArrayList;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = ...原创 2018-05-02 15:28:57 · 242 阅读 · 0 评论 -
《剑指offer》18.删除链表的节点 / 删除链表中重复的节点
删除链表中的节点题目描述: 在O(1)时间内删除链表节点。给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。 测试用例: 1、功能测试:重复的节点位于链表的头部 / 中间 / 尾部;链表中没有重复的节点 2、特殊输入测试:链表头结点为null,链表中所有节点都是重复的 思路: b图常规遍历复杂度O(n),c图覆盖方法复杂度O(1):我们要删除的节点i,先把...原创 2018-04-02 16:47:37 · 332 阅读 · 0 评论 -
[4]《剑指offer》二叉搜索树与双向链表
题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。方法一:非递归版 解题思路: 1.核心是中序遍历的非递归算法。 2.修改当前遍历节点与前一遍历节点的指针指向。/**public class TreeNode { int val = 0; TreeNode left = null; ...原创 2018-05-04 20:20:53 · 288 阅读 · 0 评论 -
[4]《剑指offer》二叉搜索树的第k个节点
题目描述 给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(...原创 2018-05-04 22:48:59 · 262 阅读 · 0 评论 -
《剑指offer》复杂链表的复制
题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)方法一:使用HashMap,空间复杂度O(n)/*public class RandomListNode { int label; Random...原创 2018-04-27 16:11:22 · 250 阅读 · 0 评论 -
《剑指offer》两个链表的第一个公共节点
题目描述 输入两个链表,找出它们的第一个公共结点。根据提交结果来看,只需要考虑无环单链表:/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { ...原创 2018-04-27 21:07:26 · 196 阅读 · 0 评论 -
《剑指offer》链表中环的入口节点
题目描述 一个链表中包含环,请找出该链表的环的入口结点。 方法一:空间复杂度O(n)/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/import java.util.HashSet;...原创 2018-04-27 21:18:09 · 204 阅读 · 0 评论 -
《剑指offer》包含min函数的栈
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。import java.util.Stack;public class Solution { Stack<Integer> data = new Stack<>(); Stack<Integer> min = new Stack<&原创 2018-04-27 21:46:19 · 179 阅读 · 0 评论 -
《剑指offer》平衡二叉树
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。public class Solution { public static class ReturnData { public boolean isBalanced; public int height; public ReturnData(boolean isBalanced,...原创 2018-04-27 22:17:45 · 233 阅读 · 0 评论 -
《剑指offer》二叉树的深度
题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。方法一:递归,时间复杂度O(logn)/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public...原创 2018-04-27 23:12:37 · 234 阅读 · 0 评论 -
面试常见算法3:对链表的操作
1,单/双链表的逆序package sword_to_offer_linkedlist;public class ReverseList { public static class Node { public int value; public Node next; public Node(int data) { ...原创 2018-04-18 16:45:44 · 318 阅读 · 0 评论 -
《剑指offer》链表中倒数第k个节点
题目描述 输入一个链表,输出该链表中倒数第k个结点。方法一: 思路:倒第k即正第size - k + 1,遍历链表两次,时间复杂度O(n)/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/...原创 2018-04-22 00:20:54 · 205 阅读 · 0 评论 -
《剑指offer》4.二维数组中的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:选取四个角中的某个中间数字开始比较,使得无论大于或者小于都可以去除一行或者一列。public class Solution { public static boolean Find(int targe...原创 2018-03-23 13:54:57 · 165 阅读 · 0 评论 -
《剑指offer》5.替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。题意一、新创建一个StringBufferpublic static String replaceSpace(StringBuffer str) { if (str == null) return null...原创 2018-03-23 15:09:16 · 138 阅读 · 0 评论 -
《剑指offer》6.从尾到头打印链表
题目描述 输入一个链表,从尾到头打印链表每个节点的值。思路:先读入的最后打印出,先进后出问题用栈实现或者用递归实现一、用栈实现/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this...原创 2018-03-23 16:48:41 · 171 阅读 · 0 评论 -
?《剑指offer》7.重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:先序的第一个是根节点,根据根节点在中序中的位置将中序划分成左右子树,再递归实现,直到只剩一个结点再递归就会使得其左右子节点都为null并逐层返...原创 2018-03-25 09:50:26 · 188 阅读 · 0 评论 -
《剑指offer》8.二叉树的下一个节点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:如果有右子树,则找右子树的最左节点;如果没有右子树,则向上递归找该节点属于哪个父节点左支,则返回该父节点/*public class TreeLinkNode { int val; TreeLinkNode left = ...原创 2018-03-25 10:19:08 · 196 阅读 · 0 评论 -
《剑指offer》9.用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路: A为入口,B为出口。入栈:将数据首先倒入stack1中;出栈:如果stack2不为空则从stack2中弹出,如果stack2为空stack1不为空,则将stack1中的全部倒入stack2中再弹出。如果出栈时stack1和stack2都为空则报错。import java.util.St...原创 2018-03-25 10:55:07 · 211 阅读 · 0 评论 -
《剑指offer》10.斐波那契数列 / 跳台阶 / 变态跳台阶 / 矩形覆盖
斐波那契数列题目描述 大家都知道斐波那契数列:f(0) = 0, f(1) = 1, f(n) = f(n - 1) + f(n - 2) 现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39思路:如果直接用f(n) = f(n - 1) + f(n - 2)递归,重复计算次数太多,效率低下;用自下而上的循环较好,通过f(0)和f(1)算出f(2),再根据已知的f...原创 2018-03-25 15:46:12 · 293 阅读 · 0 评论 -
《剑指offer》11.旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:利用数组两部分都是有序的进行二分查找,时间复杂度O(logn)import java.util.Array原创 2018-03-26 19:11:57 · 178 阅读 · 0 评论 -
《剑指offer》12.矩阵中的路径
题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径,因为字符串的第一个字符b占...原创 2018-03-26 20:10:54 · 197 阅读 · 0 评论 -
《剑指offer》13.机器人的运动范围
题目描述 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路:回溯法,当问题看起来比较复杂的时候...原创 2018-03-26 20:47:59 · 249 阅读 · 0 评论 -
《剑指offer》15.二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。public class Solution { public int NumberOf1(int n) { int count = 0; int flag = 1; // flag刚开始是1,一直在左移,当1进行了32次左移后,flag=0跳出while循环,...原创 2018-03-26 21:50:45 · 228 阅读 · 0 评论 -
面试常见算法2:对树的操作
1、树的遍历:先序/中序/后序/层次遍历package sword_to_offer_tree;import java.util.LinkedList;import java.util.Queue;import java.util.Stack;public class PreInPosLayerTraversal { public static class Node {...原创 2018-04-15 15:56:46 · 429 阅读 · 0 评论 -
《剑指offer》14.剪绳子
题目描述: 给你一根长度为n的绳子,请把绳子剪成m段(m和n都是整数,n > 1,m > 1),每段绳子的长度记为k[0],k[1],k[2]…k[m]。请问k[0] * k[1] * … * k[m]可能的最大乘积是多少?例如,当绳子的长度为8时,我们把它分别剪成2,3,3的三段,此时乘积最大是18。思路一:利用动态规划,自下而上的循环,原理同斐波那契数列,时间复杂度O(n²)...原创 2018-03-28 20:11:14 · 389 阅读 · 0 评论 -
《剑指offer》16.数值的整数次方
题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。注意:要考虑全面(底数为-,0,+;指数为-,0,+)public class Solution { public double Power(double base, int exponent) { if ...原创 2018-03-29 14:32:56 · 204 阅读 · 0 评论 -
[3]《剑指offer》17.打印从1到最大的n位数
题目描述: 输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1\2\3一直到最大的3位数299思路一:考虑大数用String表示,考虑从第一个不为0的数字开始输出public class Print1ToMaxOfNDigits { public static void Print1ToMaxOfNDigits(int n) { if (...原创 2018-03-29 17:04:31 · 293 阅读 · 0 评论 -
《剑指offer》合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。递归版:/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class So...原创 2018-04-21 23:36:01 · 274 阅读 · 0 评论 -
《剑指offer》从上到下打印二叉树
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}...原创 2018-04-29 16:37:37 · 218 阅读 · 0 评论