![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
xzs_xiaobai
我也不清楚
展开
-
出鞘之剑指offer-第43题 (1 ~ n整数中 1 出现的次数)
题目:输入一个整数 n ,求 1 ~ n 这 n 个整数的十进制表示中 1 出现的次数。分析一:借鉴博客代码一:package offer.xzs.fourty2fourtynine.fourtythree;public class Demo01 { public static void main(String[] args) { int count = getCount(12); System.out.println(count..原创 2020-05-30 21:31:56 · 225 阅读 · 0 评论 -
出鞘之剑指offer-第42题 (连续子数组的最大和)
题目:输入一个整数数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n)。分析一:代码一:package offer.xzs.fourty2fourtynine.fourtytwo;public class Demo01 { public static void main(String[] args) { int[] array = { 1, -2, 3, 10, -4, 7, 2,..原创 2020-05-30 20:58:30 · 135 阅读 · 0 评论 -
出鞘之剑指offer-第41题 (数据流中的中位数)
题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。分析一:用两个堆,大顶堆和小顶堆,分别存储中位数左边的数值和右边的数值。代码一:package offer.xzs.fourty2fourtynine.fourtyone;import java.util.PriorityQueue;public class Demo01 { ..原创 2020-05-30 09:50:17 · 144 阅读 · 0 评论 -
出鞘之剑指offer-第40题 (最小的k个数)
题目:输入 n 个整数,找出其中最小的 k 个数。例如输入 4、5、1、6、2、7、3、8 这 8 个数字,则最小的 4 个数字是 1、2、3、4。分析一:代码一:原创 2020-05-27 16:45:57 · 122 阅读 · 0 评论 -
出鞘之剑指offer-第39题 (数组中出现次数超过一半的数字)
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为 9 的数组 { 1, 2, 3, 2, 2, 2, 5, 4, 2 } 。由于数字 2 在数组中出现了 5 次,超过数组长度的一半,因此输出 2 。分析一:使用摩尔投票算法,也是多数投票算法。代码一:package offer.xzs.thirty2thirtynine.thirtynine;public class Demo01 { public static void mai..原创 2020-05-27 16:36:38 · 167 阅读 · 0 评论 -
出鞘之剑指offer-第38题 (字符串的排列)
题目:输入一个字符串,打印出该字符串中字符的所有排列。分析一:用递归代码一:package offer.xzs.thirty2thirtynine.thirtyeight;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Demo01 { public static List<String> result = new Arra.原创 2020-05-27 15:36:38 · 217 阅读 · 0 评论 -
出鞘之剑指offer-第37题 (序列化二叉树)
题目:实现两个函数,序列化和反序列化二叉树。分析一:代码一:package offer.xzs.thirty2thirtynine.thirtyseven;import java.util.Arrays;public class Demo01 { public static String deserializeStr = null; public static void main(String[] args) { int[] pre ..原创 2020-05-27 13:17:24 · 191 阅读 · 0 评论 -
出鞘之剑指offer-第36题 (二叉搜索树与双向链表)
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整树中结点指针的指向。分析一:代码一:package offer.xzs.thirty2thirtynine.thirtysix;import java.util.Arrays;public class Demo01 { public static BinaryTree head = null; public static BinaryTree pre = ..原创 2020-05-27 12:51:04 · 127 阅读 · 0 评论 -
出鞘之剑指offer-第35题 (复杂链表的复制)
题目:实现函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 sibling 指针指向链表中的任意节点或者 null 。分析一:分三步:先复制next,在复制sibling, 最后拆开。代码一:package offer.xzs.thirty2thirtynine.thirtyfive;public class Demo01 { public static void main(String[] args) { ..原创 2020-05-27 11:37:23 · 167 阅读 · 0 评论 -
出鞘之剑指offer-第34题 (二叉树中和为某一值的路径)
题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。分析一:代码一:package offer.xzs.thirty2thirtynine.thirtyfour;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Demo01 { public s..原创 2020-05-27 11:07:25 · 148 阅读 · 0 评论 -
出鞘之剑指offer-第33题 (二叉搜索树的后序遍历序列)
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。返回 true 或者 false 。假设输入的数组任意两个数字都互不相同。分析一:由于后序遍历的最后一个节点是一棵树的根节点,而且,二叉搜索树是根节点的左子树的值小于根节点小于右子树的值。所以可以用递归的方式,重复一个过程。代码一:package offer.xzs.thirty2thirtynine.thirtythree;public class Demo01 { public static v..原创 2020-05-26 19:13:41 · 148 阅读 · 0 评论 -
出鞘之剑指offer-第32题 (从上到下打印二叉树)
题目:题目一:不分行从上到下打印二叉树从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。分析一:层次遍历,使用队列。代码一:package offer.xzs.thirty2thirtynine.thirtytwo;import java.util.*;public class Demo01 { public static void main(String[] args) { int[] pre1 = { 8, 6, 5,..原创 2020-05-26 16:42:10 · 158 阅读 · 0 评论 -
出鞘之剑指offer-第31题 (栈的压入、弹出序列)
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列 { 1, 2, 3, 4, 5 } 是某栈的压入顺序,序列 { 4, 5, 3, 2, 1 } 是该压栈序列对应的一个弹出序列,但 { 4, 3, 5, 1, 2 } 就不可能是该压栈序列的弹出序列。分析一:用一个栈来模拟这个过程,当栈顶元素等于序列的第一个数时,出栈的同时要使序列的下标再往后移一位。代码一:package offer.xzs.thi原创 2020-05-26 15:31:38 · 120 阅读 · 0 评论 -
出鞘之剑指offer-第30题 (包含min函数的栈)
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数。在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。分析一:定义一个辅助栈,用来存储每次压入栈的最小值。代码一:package offer.xzs.thirty2thirtynine.thirty;import java.util.Stack;public class Demo01 { private static Stack<Integer> d..原创 2020-05-26 09:53:22 · 140 阅读 · 0 评论 -
出鞘之剑指offer-第29题 (顺时针打印矩阵)
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。分析一:考虑好坐标,然后按照顺时针遍历。代码一:package offer.xzs.twentyone2thirty.twentynine;import java.util.ArrayList;import java.util.List;public class Demo01 { public static void main(String[] args) { int[][] a.原创 2020-05-26 09:26:15 · 160 阅读 · 0 评论 -
出鞘之剑指offer-第28题 (对称的二叉树)
题目:实现一个函数,用来判断二叉树是不是对称的。如果一个二叉树和他的镜像二叉树一样,他就是对称的。分析一:代码一:package offer.xzs.twentyone2thirty.twentyeight;import java.util.Arrays;public class Demo01 { public static void main(String[] args) { int[] pre1 = { 8, 6, 5, 7, 6, 7, 5..原创 2020-05-24 21:16:44 · 116 阅读 · 0 评论 -
出鞘之剑指offer-第27题 (二叉树的镜像)
题目:输入一棵二叉树,输出他的镜像。分析一:代码一:package offer.xzs.twentyone2thirty.twentyseven;import java.util.Arrays;public class Demo01 { public static void main(String[] args) { int[] pre1 = { 8, 8, 9, 2, 4, 7, 7 }; int[] mid1 = { 9, 8..原创 2020-05-24 21:06:06 · 191 阅读 · 0 评论 -
出鞘之剑指offer-第26题 (树的子结构)
题目:输入两棵二叉树 A 和 B ,判断 B 是不是 A 的子结构。分析一:使用递归的方式。代码一:package offer.xzs.twentyone2thirty.twentysix;import java.util.Arrays;public class Demo01 { public static void main(String[] args) { int[] pre1 = { 8, 8, 9, 2, 4, 7, 7 }; ..原创 2020-05-24 20:47:39 · 147 阅读 · 0 评论 -
出鞘之剑指offer-第25题 (合并两个排序的链表)
题目:输入两个递增排序的链表,合并之后仍有序。分析一:使用递归。代码一:package offer.xzs.twentyone2thirty.twentyfive;public class Demo01 { public static void main(String[] args) { ListNode head1 = new ListNode(1); ListNode node1 = new ListNode(2); ..原创 2020-05-24 15:11:31 · 85 阅读 · 0 评论 -
出鞘之剑指offer-第24题 (反转链表)
题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。分析一:使用头插法。代码一:package offer.xzs.twentyone2thirty.twentyfour;public class Demo01 { public static void main(String[] args) { ListNode head = new ListNode(1); ListNode node1 = new List.原创 2020-05-24 14:39:15 · 118 阅读 · 0 评论 -
出鞘之剑指offer-第23题 (链表中环的入口节点)
题目:如果链表中包含环,如何找出环的入口节点?分析一:代码一:package offer.xzs.twentythree;public class Demo01 { public static void main(String[] args) { ListNode head = new ListNode(1); ListNode node1 = new ListNode(2); ListNode node2 = new..原创 2020-05-23 13:49:45 · 117 阅读 · 0 评论 -
出鞘之剑指offer-第22题 (链表中倒数第k个节点)
题目:输入一个链表,输出这个链表的第 k 个节点。本题从 1 开始计数,即链表的尾节点是倒数第 1 个节点。分析一:设置两个指针 P1 和 P2,先让 P1 移动 K 个节点,则还有 N - K 个节点可以移动。此时让 P1 和 P2 同时移动,可以知道当 P1 移动到链表结尾时,P2 移动到第 N - K 个节点处,该位置就是倒数第 K 个节点。代码一:package offer.xzs.twentytwo;public class Demo01 { public .原创 2020-05-23 13:00:04 · 171 阅读 · 0 评论 -
出鞘之剑指offer-第21题 (调整数组顺序使奇数位于偶数前面)
题目:输入一个整数数组,实现一个函数调整该数组中数字的顺序使得所有奇数位于数组前半部分,所有偶数位于数组后半部分。分析一:设两个指针,进行奇偶数交换。代码一:package offer.xzs.twentyone;public class Demo01 { public static void main(String[] args) { int[] arr = { 1, 2, 3, 4, 5, 6 }; int[] sort = s...原创 2020-05-23 12:40:49 · 160 阅读 · 0 评论 -
出鞘之剑指offer-第20题 (表示数值的字符串)
题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如:字符串 "+100"、"5e2"、"-123"、"3.1416"、及 "-1E-16" 都表示数值,但 "12e"、"1a3.14"、"1.2.3"、"+-5"、"12e+5.4" 都不是。分析一:代码一:...原创 2020-05-19 09:58:08 · 173 阅读 · 0 评论 -
出鞘之剑指offer-第19题 (正则表达式匹配)
题目:实现一个函数用来匹配 '.' 和 '*' 的正则表达式。模式中的字符 '.' 表示任意一个字符,而 '*' 表示他前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。分析一:代码一:...原创 2020-05-19 09:53:40 · 180 阅读 · 0 评论 -
出鞘之剑指offer-第18题 (删除链表的节点)
题目:题目一:在O(1)时间内删除链表节点给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。链表节点定义如下:struct ListNode { int value; ListNode next; }void DeleteNode ( ListNode head, ListNode temp)分析一:如果节点是尾节点,则,从头结点开始遍历,遍历到前一个节点删除,如果不是,则将要删除节点的后一个节点的值赋值给前一个节点。代码一:pack...原创 2020-05-19 09:47:07 · 145 阅读 · 0 评论 -
出鞘之剑指offer-第17题 (打印从1到最大的n位数)
题目:输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的3位数999。分析一:由于没有说不考虑大数,所以用字符串模拟代码一:package offer.xzs.seventeenth;public class Demo01 { public static void main(String[] args) { printNumbers(2); } public static void pri...原创 2020-05-19 09:08:54 · 175 阅读 · 0 评论 -
出鞘之剑指offer-第16题 (数值的整数次方)
题目:实现函数double Power (double base, int exponent) ,求 base 的exponent次方,不得使用库函数,不用考虑大数问题。分析一:代码一:package offer.xzs.sixteenth;public class Demo01 { public static void main(String[] args) { double power = getPower(2, 10); ...原创 2020-05-19 07:56:05 · 133 阅读 · 0 评论 -
出鞘之剑指offer-第15题 (二进制中1的个数)
题目:实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。分析一:代码一:原创 2020-05-12 20:04:18 · 101 阅读 · 0 评论 -
出鞘之剑指offer-第14题 (剪绳子)
题目:给你一根长度为n的绳子,请把绳子剪成m段(m和n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]*k[1]*...*k[m]可能的最大乘积是多少?分析一:代码一:原创 2020-05-12 20:02:18 · 163 阅读 · 0 评论 -
出鞘之剑指offer-第13题 (机器人的运动范围)
题目:地上有一个m行和n列的方格。一个机器人从坐标 (0,0) 的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于 k 的格子。 例如,当 k 为 18 时,机器人能够进入方格(35, 37),因为3+5+3+7=18。但是,它不能进入方格(35,38),因为3+5+3+8=19。请问该机器人能够达到多少个格子?分析一:代码一:...原创 2020-05-12 19:59:08 · 159 阅读 · 0 评论 -
出鞘之剑指offer-第12题 (矩阵中的路径)
题目:设计一个函数,判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中上、下、左、右移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。分析一:代码一:...原创 2020-05-12 19:56:33 · 157 阅读 · 0 评论 -
出鞘之剑指offer-第11题 (旋转数组的最小数字)
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如:数组{ 3, 4, 5, 1, 2}为{ 1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。分析一:代码一:...原创 2020-05-12 16:35:52 · 128 阅读 · 0 评论 -
出鞘之剑指offer-第10题 (斐波那契数列)
题目:题目一:求斐波那契数列的第n项。分析一:用递归做代码一:package offer.xzs.tenth;public class Fibonacci01 { public static void main(String[] args) { int fib = fib(2); System.out.println(fib); } public static int fib(int n) { if...原创 2020-05-12 16:26:23 · 233 阅读 · 0 评论 -
出鞘之剑指offer-第9题 (用两个栈实现队列)
题目:用两个栈实现一个队列。队列的声明如下,请实现他的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。分析一:栈是”先入后出“,队列是”先入先出“。用两个栈stack1、stack2实现一个队列,就是从”先入后出“改成”先入先出“。把stack2当作一个中转。删除:将元素压到stack1中,如要删除,把stack1中的元素弹出,压到stack2中,再从stack2中拿到。插入:还是像往常一样,将元素压到stack1中。..原创 2020-05-12 13:15:57 · 130 阅读 · 0 评论 -
出鞘之剑指offer-第8题 (二叉树的下一个节点)
题目:给定一棵二叉树和其中一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针。分析一:(1)如果一个节点有右子树,那下一个节点就是它右子树的最左子节点。(2)如果一个节点没有右子树: (a)如果这个节点是其父节点的左子节点,那下一个节点就是其父节点。 (b)如果这个节点是其父节点的右子节点,就必须沿着指向父节点的指针向上遍历,知道找到是父节点的左子节点的节点, ...原创 2020-05-12 12:46:45 · 165 阅读 · 0 评论 -
出鞘之剑指offer-第7题 (重建二叉树)
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含有重复的数字。例如:输入前序遍历序列{ 1, 2, 4, 7, 3, 5, 6, 8}和中序遍历序列{ 4, 7, 2, 1, 5, 3, 8, 6},则重建二叉树并输出他的头节点。二叉树定义:struct BinaryTreeNode { int value; BibaryTreeNode left; BinaryTreeNode right;};分析一:两种遍历方式可...原创 2020-05-10 22:33:23 · 145 阅读 · 0 评论 -
出鞘之剑指offer-第6题 (从头到尾打印链表)
题目:输入一个链表的头节点,从尾到头反过来打印出每个节点的值。链表节点定义如下:struct ListNode { int value;ListNode next;}分析一:使用递归。代码一:package offer.xzs.sixth;public class PrintListNum01 { public static void main(String[] args) { ListNode listNode1 = new ListNo...原创 2020-05-10 13:25:17 · 146 阅读 · 0 评论 -
出鞘之剑指offer-第5题 (替换空格)
题目:实现一个函数,把字符串中的每个空格替换成“%20”。例如:输入“We are happy”,则输出“We%20are%20happy”。分析一:使用stringbuilder,遍历原字符串,往stringbuilder对象中追加,碰到空格,追加%20。代码一:package offer.xzs.four;public class ReplaceSpace02 { public static void main(String[] args) { ..原创 2020-05-10 10:59:09 · 135 阅读 · 0 评论 -
出鞘之剑指offer-第4题 (二维数组中的查找)
题目在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析一最基础的,就立马想到全都遍历一遍代码一package offer.xzs.fourth;public class BaseCode { public static void ma...原创 2020-04-08 21:18:02 · 154 阅读 · 0 评论