
剑指offer
one_zero_one
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
剑指 Offer 60. n个骰子的点数
难度中等279把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。示例 1:输入: 1输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]示例2:输入: 2输出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.166...原创 2021-08-13 20:17:43 · 186 阅读 · 0 评论 -
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
难度简单154给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root =[6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q =...原创 2021-08-13 19:57:39 · 226 阅读 · 0 评论 -
剑指 Offer 55 - II. 平衡二叉树
难度简单180输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。示例 1:给定二叉树[3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回true。示例 2:给定二叉树[1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3...原创 2021-08-13 19:35:22 · 197 阅读 · 0 评论 -
剑指 Offer 66. 构建乘积数组
难度中等142给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B[i]的值是数组A中除了下标i以外的元素的积, 即B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。示例:输入: [1,2,3,4,5]输出: [120,60,40,30,24]class Solution: def constructArr(self, a: List[int]) -> List[int]...原创 2021-08-13 16:16:43 · 95 阅读 · 0 评论 -
剑指 Offer 59 - II. 队列的最大值
难度中等270请定义一个队列并实现函数max_value得到队列里的最大值,要求函数max_value、push_back和pop_front的均摊时间复杂度都是O(1)。若队列为空,pop_front和max_value需要返回 -1示例 1:输入: ["MaxQueue","push_back","push_back","max_value","pop_front","max_value"][[],[1],[2],[],[],[]]输出:[null,null...原创 2021-08-13 15:35:18 · 104 阅读 · 0 评论 -
剑指 Offer 44. 数字序列中某一位的数字
难度中等157数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。示例 1:输入:n = 3输出:3示例 2:输入:n = 11输出:0class Solution: def findNthDigit(self, n: int) -> int: start,digit,count..转载 2021-08-13 15:02:49 · 202 阅读 · 0 评论 -
剑指 Offer 54. 二叉搜索树的第k大节点
难度简单188给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 4#右》根》左# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# ...原创 2021-08-12 23:31:20 · 74 阅读 · 0 评论 -
剑指 Offer 48. 最长不含重复字符的子字符串
难度中等255请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。class Solution: def lengthOfLongestSubstring(self, s: str) -> int: d={} i=-1 num=0 for j...原创 2021-08-12 23:06:23 · 91 阅读 · 0 评论 -
剑指 Offer 41. 数据流中的中位数
难度困难167如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。例如,[2,3,4]的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。 double findMedian() - 返回目前所有元素的中位数...原创 2021-08-12 22:38:08 · 104 阅读 · 0 评论 -
剑指 Offer 40. 最小的k个数
难度简单281输入整数数组arr,找出其中最小的k个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 1:输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]示例 2:输入:arr = [0,1,2,1], k = 1输出:[0]# 一个容器里面放k个数,这k个数排序,第k个最大,当外面的数小于第k个数时,容器删除第k个数,加入外面的数 # python3只有最小...原创 2021-08-12 22:04:19 · 98 阅读 · 0 评论 -
剑指 Offer 53 - II. 0~n-1中缺失的数字
难度简单156一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例2:输入: [0,1,2,3,4,5,6,7,9]输出: 8#二分法class Solution: def missingNumber(self, nums: List[int]) -> int: i=0...原创 2021-08-12 19:56:14 · 85 阅读 · 0 评论 -
剑指 Offer 65. 不用加减乘除做加法
难度简单202写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。示例:输入: a = 1, b = 1输出: 2class Solution: def add(self, a: int, b: int) -> int: x=0xffffffff # 考虑负数的存在 a=a & x b=b & x wh...原创 2021-08-12 18:01:17 · 101 阅读 · 0 评论 -
统计一个数字在排序数组中出现的次数。
示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0#二分法class Solution: def search(self, nums: [int], target: int) -> int: def helper(tar): i, j = 0, len(nums) - 1 ...原创 2021-08-12 16:48:23 · 125 阅读 · 0 评论 -
剑指 Offer 58 - I. 翻转单词顺序
难度简单123输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。示例 1:输入: "the sky is blue"输出:"blue is sky the"示例 2:输入: " hello world! "输出:"world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括...原创 2021-08-12 16:05:30 · 96 阅读 · 0 评论 -
剑指 Offer 46. 把数字翻译成字符串
难度中等261给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"class Solution: def translateNum(se..原创 2021-08-12 14:38:06 · 60 阅读 · 0 评论 -
剑指 Offer 45. 把数组排成最小的数
难度中等257输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例 1:输入: [10,2]输出: "102"示例2:输入: [3,30,34,5,9]输出: "3033459"x+y>y+x ,x,y为str,则x》yclass Solution: def minNumber(self, nums: List[int]) -> str: for i in range(len(n...原创 2021-08-11 18:50:43 · 116 阅读 · 0 评论 -
剑指 Offer 57 - II. 和为s的连续正数序列
难度简单302输入一个正整数target,输出所有和为target的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15class Solution: def findContinuousSequence(self, target: int) -> List[List[int]]: ...原创 2021-08-11 12:40:35 · 102 阅读 · 0 评论 -
剑指 Offer 38. 字符串的排列
难度中等400输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = "abc"输出:["abc","acb","bac","bca","cab","cba"]class Solution: def permutation(self, s: str) -> List[str]: n=len(s) res=[] queue=list(s) #..原创 2021-08-10 23:19:43 · 84 阅读 · 0 评论 -
剑指 Offer 36. 二叉搜索树与双向链表
难度中等283输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。特别地,我们希望可以就地完成..原创 2021-08-10 22:34:55 · 89 阅读 · 0 评论 -
剑指 Offer 55 - I. 二叉树的深度
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。例如:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3 。# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# ...原创 2021-08-09 22:32:50 · 89 阅读 · 0 评论 -
剑指 Offer 37. 序列化二叉树
请实现两个函数,分别用来序列化和反序列化二叉树。你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。提示:输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。示例:输入:root = [1,2,3,null,null,4,5]输出:[1,...原创 2021-08-09 22:19:26 · 125 阅读 · 0 评论 -
剑指 Offer 43. 1~n 整数中 1 出现的次数
输入一个整数n,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。示例 1:输入:n = 12输出:5示例 2:输入:n = 13输出:6class Solution: def countDigitOne(self, n: int) -> int: base=1 s=0 while base<...原创 2021-08-09 22:18:34 · 93 阅读 · 0 评论 -
剑指 Offer 35. 复杂链表的复制
请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。示例 1:输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]"""# Definition for a Node.class Node: def __init__原创 2021-08-08 22:55:34 · 72 阅读 · 0 评论 -
剑指 Offer 28. 对称的二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树[1,2,2,3,4,4,3] 是对称的。1/ \2 2/ \ / \3 4 4 3但是下面这个[1,2,2,null,3,null,3] 则不是镜像对称的:1/ \2 2\ \3 3对称二叉树定义: 对于树中 任意两个对称节点 LL 和 RR ,一定有:L.val = R.valL.val=...原创 2021-08-08 15:43:33 · 61 阅读 · 0 评论 -
剑指 Offer 26. 树的子结构
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A:3/ \4 5/ \1 2给定的树 B:4/1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]输出:false示例 2:输入:A = [3,4,5,1,2], B = [4,...原创 2021-08-07 22:13:53 · 96 阅读 · 0 评论 -
剑指 Offer 25. 合并两个排序的链表
①96. 不同的二叉搜索树难度中等1234给你一个整数n,求恰由n个节点组成且节点值从1到n互不相同的二叉搜索树有多少种?返回满足题意的二叉搜索树的种数。示例 1:输入:n = 3输出:5示例 2:输入:n = 1输出:1...原创 2021-08-07 22:10:08 · 58 阅读 · 0 评论 -
剑指 Offer 24. 反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next =原创 2021-08-07 20:38:59 · 60 阅读 · 0 评论 -
剑指 Offer 18. 删除链表的节点
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.# Definition for singly-linked list.# class ListNode:# def __init__...原创 2021-08-07 21:17:03 · 169 阅读 · 0 评论 -
剑指 Offer 34. 二叉树中和为某一值的路径
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和target = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[ [5,4,11,2],...原创 2021-08-07 16:49:42 · 153 阅读 · 0 评论 -
06. 从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def reversePrint(self, h原创 2021-08-04 22:33:47 · 68 阅读 · 0 评论 -
12. 矩阵中的路径
给定一个m x n 二维字符网格board 和一个字符串单词word 。如果word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。例如,在下面的 3×4 的矩阵中包含单词 "ABCCED"(单词中的字母已标出)。示例 1:输入:board = [["A","B","C","E"],["S","F","C","S"],["A...原创 2021-08-04 15:38:59 · 102 阅读 · 0 评论 -
剑指offer--二叉树的下一个结点
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。# -*- coding:utf-8 -*-# class TreeLinkNode:# def __init__(self, x):# self.val = x# self.left = None...原创 2019-08-10 14:04:53 · 105 阅读 · 0 评论 -
剑指offer--用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。# -*- coding:utf-8 -*-# 栈A用来作入队列,栈B用来出队列,当栈B为空时,栈A全部出栈到栈B,栈B再出栈(即出队列)class Solution: def __init__(self): self.stackA = [] self....原创 2019-08-10 14:22:10 · 103 阅读 · 0 评论 -
剑指offer--斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39# -*- coding:utf-8 -*-class Solution: def Fibonacci(self, n): a,b=0,1 for i in range(n): a,b=b,a+...原创 2019-08-10 14:54:49 · 93 阅读 · 0 评论 -
剑指offer----旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。# -*- coding:utf-8 -*-#非递减数组旋转之后最小值,也就是寻找分界点,分界点前后都...原创 2019-08-10 16:09:57 · 204 阅读 · 0 评论 -
丑数
题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。# -*- coding:utf-8 -*-class Solution: def GetUglyNumber_Solution(self, index): # write ...原创 2019-08-14 20:13:04 · 136 阅读 · 0 评论 -
滑动窗口的最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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,...原创 2019-08-19 16:28:04 · 114 阅读 · 0 评论 -
和为s的两个数 及 和为S的连续正数序列
一和为S的两个数输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。def FindNumbersWithSum(self, array, tsum): # 两头开始找匹配,乘积最小必定为最先找到的,如7+8=15 1+14=15乘积1*14小...原创 2019-08-12 20:25:11 · 117 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。# -*- coding:utf-8 -*-class Solution: def VerifySquenceOfBST(self, sequence): # write code here if no...原创 2019-08-14 15:43:03 · 112 阅读 · 0 评论 -
从上往下打印二叉树
从上往下打印出二叉树的每个节点,同层节点从左至右打印。# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: ...原创 2019-08-14 15:19:11 · 164 阅读 · 0 评论