剑指offer
CIA_agent
这个作者很懒,什么都没留下…
展开
-
leetcode 542. 01 矩阵
可以采用广度遍历的方式来做,先把所有为 0 的元素进队列,然后依次计算出其临近的元素的距离,依次直到把矩阵中所有的元素的距离都计算完。输入:mat = [[0,0,0],[0,1,0],[0,0,0]]输入:mat = [[0,0,0],[0,1,0],[1,1,1]]输出:[[0,0,0],[0,1,0],[0,0,0]]输出:[[0,0,0],[0,1,0],[1,2,1]]两个相邻元素间的距离为 1。mat 中至少有一个 0。原创 2023-07-15 09:56:02 · 1203 阅读 · 0 评论 -
二叉树的序列化和反序列化
&ensp二叉树的序列化是指把二叉树保存成字符串的形式,而二叉树的反序列化则表示把保存成字符串形式的数据恢复成二叉树。&ensp根据二叉树序列化的定义,二叉树序列化比较简单,用#表示为空,保存时,每个节点用逗号隔开,这样,用前序遍历的形式就可以很容易序列化二叉树。反序列化也同理:class Solution: def __init__(self): se...原创 2019-03-04 20:23:51 · 498 阅读 · 0 评论 -
剑指 offer 44 数字序列中某一位的数字
思路:以 13 为例, 因为 13>=10,故到 13 的时候数字肯定是两位数,我们可以把前面的 0,1,2,3…9 前面补 0 变成 00,01,…09, 这样相当于在全是两位数的 00,01,02,…99 中查找第 23位对应的数字。的格式作为一个字符序列,在这个序列中第 2 位(从下标 0 开始计算)是 2 ,第 10 位是 1 ,第 13 位是 1 ,以此类题,请你输出第 n 位对应的数字。第 23 为对应 数字 11 中的第2位(str=‘11’ 的 index 为 1 的那一位)原创 2023-07-10 11:13:41 · 83 阅读 · 0 评论 -
剑指offer 41 数据流中的中位数
如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。数据流里面不断吐出的是5,2,3…,则得到的平均数分别为5,(5+2)/2,3…进阶: 空间复杂度 O(n) , 时间复杂度 O(nlogn)1≤n≤1000 ,大小满足 1≤val≤1000。思路:可以用一个最大值堆和最小值堆可存一半的数据。原创 2023-07-09 19:38:59 · 248 阅读 · 0 评论 -
剑指 offer 36. 二叉搜索树与双向链表
思路:最常规的思路就是中序遍历,对于BST 数,中序遍历就是一个有序的列表,然后把列表转成一个双向队列就ok,由于题目要求空间复杂度 O(1), 我们可以在中序遍历的时候对原有的树做一些变换,在数的基础上进行调整,这样就不用再申请额外的空间了。数据范围:输入二叉树的节点数 0≤n≤1000,二叉树中每个节点的值 0≤val≤1000,要求:空间复杂度 O(1)(即在原树上操作),时间复杂度 O(n)输入题面图中二叉树,输出的时候将双向链表的头节点返回即可。2.返回链表中的第一个节点的指针。原创 2023-07-03 21:56:32 · 124 阅读 · 0 评论 -
BM70 兑换零钱(一)
描述给定数组arr,arr中所有的值都为正整数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个aim,代表要找的钱数,求组成aim的最少货币数。如果无解,请返回-1.数据范围:数组大小满足 0≤n≤10000 , 数组中每个数字都满足 0<val≤10000,0 ≤aim≤5000要求:时间复杂度 O(n×aim) ,空间复杂度 O(aim)。示例1输入:[5,2,3],20返回值:4示例2输入:[5,2,3],0返回值:0示例3输入:[3原创 2022-04-09 22:01:38 · 245 阅读 · 0 评论 -
BM65 最长公共子序列(二)
描述给定两个字符串str1和str2,输出两个字符串的最长公共子序列。如果最长公共子序列为空,则返回"-1"。目前给出的数据,仅仅会存在一个最长的公共子序列数据范围:0≤∣str1∣,∣str2∣≤2000要求:空间复杂度 O(n*n) ,时间复杂度 O(n^2)示例1输入:“1A2C3D4B56”,“B1D23A456A”返回值:“123456”示例2输入:“abc”,“def”返回值:“-1”示例3输入:“abc”,“abc”返回值:“abc”示例4输入:“ab”,“”返原创 2022-04-08 10:12:23 · 369 阅读 · 0 评论 -
leetcode 寻找第 K 大(快排)
描述有一个整数数组,请你根据快速排序的思路,找出数组中第 k 大的数。给定一个整数数组 a ,同时给定它的大小n和要找的 k ,请返回第 k 大的数(包括重复的元素,不用去重),保证答案存在。要求:时间复杂度 O(nlogn),空间复杂度 O(1)数据范围:0≤n≤pow(10,5) , 1≤K≤n,数组中每个元素满足 0≤val≤10000000示例1输入:[1,3,5,2,2],5,3返回值:2基本思路还是快排的思路, 注意不要在if i < j:self.swap(a, i原创 2022-04-02 21:01:40 · 737 阅读 · 0 评论 -
剑指 offer 86. 在二叉树中找到两个节点的最近公共祖先
给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。数据范围:树上节点数满足 1≤n≤10^5, 节点值val满足区间 [0,n)要求:时间复杂度 O(n)注:本题保证二叉树中每个节点的val值均不相同。如当输入{3,5,1,6,2,0,8,#,#,7,4},5,1时,二叉树{3,5,1,6,2,0,8,#,#,7,4}如下图所示:所以节点值为5和节点值为1的节点的最近公共祖先节点的节点值为3,所以对应的输出为3。节点本身原创 2022-03-20 18:19:37 · 194 阅读 · 0 评论 -
剑指 offer 65 不用加减乘除做加法
描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。数据范围:两个数都满足 −10≤n≤1000进阶:空间复杂度 O(1),时间复杂度 O(1)示例1输入:1,2返回值:3示例2输入:0,0返回值:0解题思路对于整数,则很简单,直接按 与,或,异或等操作考虑进位就ok, 对于负数稍麻烦一些, 负数用补码表示, 假如用 n 位表示, 若一个数为负数,则其补码为 pow(2, n) - 相反数, 举个例子, -2 用补码表示为 1111111原创 2022-03-18 22:08:29 · 311 阅读 · 0 评论 -
剑指offer 59 滑动窗口的最大值
描述给定一个长度为 n 的数组 num 和滑动窗口的大小 size ,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2原创 2022-03-14 21:39:58 · 571 阅读 · 0 评论 -
剑指offer 11. 旋转数组的最小数字
描述有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。数据范围:1≤n≤10000,数组中任意元素的值: 0≤val≤10000要求:空间复杂度:O(1)O(1) ,时间复杂度:O(logn)O(logn)示例1输入:[3,4,5,1,2]返回值:1示例2输入:[3,100,200,3]原创 2022-03-01 23:16:01 · 118 阅读 · 0 评论 -
剑指offer 66. 机器人的运动范围
描述地上有一个rows行和cols列的方格。坐标从 [0,0] 到 [rows-1,cols-1]。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于threshold的格子。 例如,当threshold为18时,机器人能够进入方格[35,37],因为3+5+3+7 = 18。但是,它不能进入方格[35,38],因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?范围:1 <= rows, cols<= 10原创 2021-09-20 14:11:31 · 142 阅读 · 0 评论 -
剑指offer 46 孩子们的游戏(圆圈中最后剩下的数,约瑟夫环)
每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!_)。请你试着想下,哪个小朋友会得到这份礼品原创 2021-09-11 21:34:13 · 90 阅读 · 0 评论 -
剑指offer 24: 二叉树中和为某一值的路径
剑指offer24: 二叉树中和为某一值的路径描述输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。示例1输入:{10,5,12,4,7},22返回值:[[10,5,7],[10,12]]示例2输入:{10,5,12,4,7},15返回值:[]# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x)原创 2021-09-05 21:55:13 · 97 阅读 · 0 评论