剑指offer
DonngZH
这个作者很懒,什么都没留下…
展开
-
【剑指offer】8 二叉树的下一个结点
剑指offer-8 二叉树的下一个结点一、题目描述给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。示例:输入:{8,6,10,5,7,9,11},8返回:9解析:这个组装传入的子树根节点,其实就是整颗树,中序遍历{5,6,7,8,9,10,11},根节点8的下一个节点就是9,应该返回{9,10,11},后台只打印子树的下一个节点,所以只会打印9,如下图,其实都有指向左右孩子的...原创 2021-12-13 22:11:15 · 263 阅读 · 0 评论 -
【剑指offer】3 数组中的重复数字
剑指offer-3数组中的重复数字一、题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1。二、解题步骤1.解题思路 遍历整个数组,以数组元素为键,以此元素出现的次数为值,建立字典。最后对字典进行遍历,找出Value符合条件的K...原创 2021-12-13 08:58:13 · 242 阅读 · 0 评论 -
【剑指offer】19 顺时针打印矩阵
剑指offer-29 顺时针打印矩阵一、题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix =[[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]二、解题1.解题思路沿着顺时针方向走(右->下->左..原创 2021-12-12 10:21:01 · 177 阅读 · 0 评论 -
【剑指offer】24 二叉树中和为某一值的路径
剑指offer-23二叉搜索树的后序遍历序列一、题目描述输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。如果输入如下二叉搜索树: 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:...原创 2021-12-12 10:19:18 · 253 阅读 · 0 评论 -
剑指offer-23 二叉搜索树的后序遍历序列
剑指offer-23二叉搜索树的后序遍历序列一、题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜素树)如果输入如下二叉搜索树: 5 / \ 2 6 / \ 1 3输入: [1,6,3,2,5]输出: false输入: [1,3,2,6,5]输出: true示例1二、解题步骤1.解...原创 2021-12-12 10:18:46 · 188 阅读 · 0 评论 -
剑指offer-22 从上到下打印二叉树
剑指offer-22从上到下打印二叉树一、题目描述 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回:[3,9,20,15,7]二、解题步骤1.解题思路题目要求的二叉树的从上至下打印(即按层打印),又称为二叉树的广度优先搜索(BFS)。 BFS 通常借助队列的先入先出特性来实现。算法流程设计...原创 2021-12-12 10:18:25 · 156 阅读 · 0 评论 -
剑指offer-21 栈的压入、弹出序列
剑指offer-20 栈的压入、弹出序列一、题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。 例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。二、解题步骤1.解题思路1.定义一个栈stack作为模拟栈2.遍历pushed数组的同时将push中的元素压入stack模拟压栈过程3..原创 2021-12-12 10:18:01 · 189 阅读 · 0 评论 -
剑指offer-20 包含min函数的栈
剑指offer-20 包含min函数的栈一、题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。比如:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();mi.原创 2021-12-12 10:17:32 · 271 阅读 · 0 评论 -
剑指offer-18 二叉树的镜像
剑指offer-18二叉树的镜像一、题目描述比如: 源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5二、解题步骤1.解题思路递归解决,先遍历左子树,交换...原创 2021-12-12 10:16:34 · 244 阅读 · 0 评论 -
剑指offer -17 树的子结构
剑指offer-17 树的子结构一、题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构输入:{8,8,#,9,#,2,#,5},{8,9,#,2}输出:true母树A: 子树B: 二、解题步骤1.解题思路如果树B是树A的子结构,则子树的根节点可能是母树的任意一个节点,因此判定是否是子结构需要进行两步判断:(1)先序遍历树 A...原创 2021-12-12 10:16:00 · 140 阅读 · 0 评论 -
【剑指offer】30 连续子数组的最大和
一、题目描述 输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).输入:[1,-2,3,10,-4,7,2,-5]返回值:[1,-2,3,10,-4,7,2,-5]说明:输入的数组为{1,-2,3,10,—4,7,2,一5},和最大的子数组为{3,10,一4,7,2},因此输出为该子数组的和 18。二、解题步骤1.解题思路使用动态规划的思路解决此问题。需要重新建立一个列...原创 2022-04-25 23:45:10 · 183 阅读 · 0 评论 -
【剑指offer】28 数组中出现超过一半的数字
剑指offer-28 数组中出现超过一半的数字一、题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。你可以假设数组是非空的,并且给定的数组总是存在多数元素。1<=数组长度<=50000输入:[1,2,3,2,2,2,5,4,2]返回值:2输入:[3,3,3,3,2,2,2]返回值:3二、解题步骤1.解题思路 ..原创 2022-01-11 14:36:27 · 302 阅读 · 0 评论 -
【剑指offer】29 数组中最小的K个数
剑指offer-29 数组中最小的K个数一、题目描述给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组。输入:[4,5,1,6,2,7,3,8],4返回:[1,2,3,4]二、解题步骤1.解题思路 取出最小的K个数字,需要两步:(1)首先需要对数组的排序 (2)对排完序的数组通过切片的方式拿出2.代码实现# -*- coding:utf-8...原创 2022-04-25 23:44:27 · 240 阅读 · 0 评论 -
剑指offer-15 反转链表
剑指offer-15 反转链表一、题目描述输入一个链表,反转链表后,输出新链表的表头。二、解题步骤1.解题思路涉及到链表反转,实现的方式比较多,可以利用指针,也可以使用递归如果原链表如下:、反转之后的链表:观察可以发现,如果要进行反转链表的话,我们进行的操作是第一个节点的next指针指向空 从第二个节点到最后一个节点,把每一个节点的next指针指向前一个节点。 把head指针指向最后一个节点不过这里还有一个细节,我们来看第一步,把第一个节点的next指针指.原创 2021-04-16 18:48:02 · 145 阅读 · 0 评论 -
剑指offer-14 取出链表中倒数第K个节点
剑指offer-14 取出链表中的第K个节点一、题目描述输入一个链表,输出该链表中倒数第k个结点。如果该链表长度小于k,请返回空。二、解题步骤1.解题思路假设链表中一共有n个节点,则倒数第k个节点即正数第n-k+1个节点,先找到第k个节点,剩余 n-k个,再走接下来的,即可得到倒数第k个2.代码实现# class ListNode:# def __init__(self, x):# self.val = x# self....原创 2021-04-16 08:00:06 · 156 阅读 · 0 评论 -
剑指offer-13 调整数组顺序使奇数位于偶数前面
剑指offer-13调整数组顺序使奇数位于偶数前面一、题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。二、解题步骤1.解题思路遍历一遍数组,如果元素不能整除2 那就是奇数,如果元素能整除2那就是偶数。建立两个列表,能整除2的添加到列表1中,不能整除2的添加到列表2中2.代码实现class Solution: def reOrderArray..原创 2021-04-15 21:38:35 · 155 阅读 · 0 评论 -
剑指offer-11 求二进制数中1的个数
剑指offer-11 求二进制数中1的个数一、题目描述输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。二、解题步骤1.解题思路 如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三位变成0,它后面的两位0变成了1,而前面的1...原创 2021-04-15 21:33:05 · 165 阅读 · 0 评论 -
剑指offer-10 矩形覆盖
剑指offer-10 矩形覆盖一、题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:二、解题步骤1.解题思路和青蛙跳台阶的原理类似,小矩形竖着放相当于跳一级台阶,横着放相当于跳两级台阶,那问题的就变成了一共有n个台阶,可以一次走两步,也可以一次走一步,问一共有多少种走法?其实本质仍旧是斐波那契数列。2.代码实现2.1 递归方法实...原创 2021-04-15 21:31:39 · 218 阅读 · 0 评论 -
剑指offer-9 青蛙跳台阶扩展
剑指offer-9青蛙跳台阶扩展一、题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级,也可以跳上3级...也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。二、解题步骤1.解题思路这是在青蛙跳台阶的基础上改进而来,不同与普通的青蛙跳台阶,扩展的跳是青蛙可以可以随便跳,想跳到几阶是都可以。这是一道经典的递推题目,你可以想如果青蛙当前在第n级台阶上,那它上一步是在哪里呢?显然,由于它可以跳1级台阶或者2级台阶,所以它上一步必定在第n-1,或.原创 2021-04-15 21:31:23 · 232 阅读 · 0 评论 -
剑指offer-8 青蛙跳台阶
剑指offer-8青蛙跳台阶一、题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。二、解题步骤1.解题思路这是一道经典的递推题目,你可以想如果青蛙当前在第n级台阶上,那它上一步是在哪里呢?显然,由于它可以跳1级台阶或者2级台阶,所以它上一步必定在第n-1,或者第n-2级台阶,也就是说它跳上n级台阶的跳法数是跳上n-1和跳上n-2级台阶的跳法数之和。设跳上级台阶有种跳法,则它跳上n...原创 2021-04-15 21:31:02 · 173 阅读 · 0 评论 -
剑指offer-10 斐波那契数列
剑指offer-7 斐波那契数列一、题目描述斐波那契数列指的是这样一个数列:自然中的斐波那契这个数列从第3项开始,每一项都等于前两项之和二、使用步骤1.引入库代码如下(示例):import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarnings('ignore...原创 2021-04-15 21:30:41 · 231 阅读 · 0 评论 -
剑指offer-11 旋转数组中的最小数字
剑指offer-11 旋转数组中的最小数字一、题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。关于旋转数组:/*传进去旋转数组,注意旋转数组的特性:*1.包含两个有序序列*2.最小数一定位于第二个序列的开头*3.前序列的值都>=后序列的值* 定义把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组...原创 2021-04-15 21:30:18 · 156 阅读 · 0 评论 -
剑指offer-9 利用两个栈实现队列
剑指offer-9 利用两个栈实现对列一、题目描述二、解题1.解题思路1. 分析队列的特性是:“先入先出”,栈的特性是:“先入后出”当我们向模拟的队列插入数 a,b,c 时,假设插入的是 stack1,此时的栈情况为:栈 stack1:{a,b,c} 栈 stack2:{}当需要弹出一个数,根据队列的"先进先出"原则,a 先进入,则 a 应该先弹出。但是此时 a 在 stack1 的最下面,将 stack1 中全部元素逐个弹出压入 stack2,现在可以正确的从 sta.原创 2021-04-15 21:29:55 · 132 阅读 · 0 评论 -
剑指offer-7 重建二叉树
剑指offer-7 重建二叉树一、题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。二、解题1.解题思路前序遍历:根→左→右中序遍历:左→根→右由前序遍历序列pre={1,2,4,7,3,5,6,8}可知根结点是1; 则在中序遍历序列in={4,7,2,1,5,3,8,6}中找到.原创 2021-04-15 21:29:25 · 135 阅读 · 0 评论 -
剑指offer-12 数值的整数次方
剑指offer-12 数值的整数次方一、题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0二、解题步骤1.解题思路主要考虑底数和指数两个数的各三种情况:正数、负数和0。如果底数为0:则不论指数为正负或者0,结果都为0;此时底数只剩下正、负两种情况。所以换思路考虑指数的情况;如果指数为正数:则不论底数为正负,都可以直接求出结果,(此时可以考虑如果指数为..原创 2021-04-15 21:28:41 · 145 阅读 · 0 评论 -
剑指offer-6 从尾到头打印链表
剑指offer-3 从头到尾打印链表一、题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。输入:{67,0,24,58}返回:[58,24,0,67]二、使用步骤1.解题思路既然是链表,可以通过遍历节点的值进行添加,添加到列表之后,将列表进行反转即可。2.代码实现# -*- coding:utf-8 -*-class Solution: # 返回从尾部到头部的列表值序列,例如[1,2,3] def printList原创 2021-03-22 14:54:30 · 150 阅读 · 0 评论 -
剑指offer-5 空格替换为%20
剑指offer-2 空格替换为%20一、题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。二、解题1.解题思路新建一个空的字符串,命名为result。接着从前向后遍历给定的字符串S,如果遇见空格,则将%20添加到新建的字符串result中,如果是正常的字符,则将遍历到的字符添加到新建的字符串result中。2.代码实现# -*- coding:utf-8 -*原创 2021-03-22 14:53:31 · 172 阅读 · 0 评论 -
剑指offer-4 二维数组中的查找
剑指offer-1 二维数组中的查找一、题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。输入:7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]输出:true二、解题1.解题思路利用二维数组由上到下,由左到右的递增规律以左下角元素或者是右下角元素为起始点开始查找。以..原创 2021-03-22 14:52:06 · 122 阅读 · 0 评论