- 博客(143)
- 收藏
- 关注
原创 算法排序-go
局部变量」**分配的存储空间两个部分。我们用 S(n)=O(f(n))来定义,其中n为问题的规模(或大小)。通常来说,只要算法不涉及到动态分配的空间,以及递归、栈所需的空间,空间复杂度通常为0(1)。一个一维数组。
2024-05-13 18:33:12 887
原创 剑指 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 165
原创 剑指 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 202
原创 剑指 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 179
原创 剑指 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 82
原创 剑指 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 87
转载 剑指 Offer 44. 数字序列中某一位的数字
难度中等157 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。 请写一个函数,求任意第n位对应的数字。 示例 1: 输入:n = 3 输出:3 示例 2: 输入:n = 11 输出:0 class Solution: def findNthDigit(self, n: int) -> int: start,digit,count..
2021-08-13 15:02:49 181
原创 剑指 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 60
原创 剑指 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 77
原创 剑指 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 87
原创 剑指 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 87
原创 剑指 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 73
原创 剑指 Offer 65. 不用加减乘除做加法
难度简单202 写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。 示例: 输入: a = 1, b = 1 输出: 2 class Solution: def add(self, a: int, b: int) -> int: x=0xffffffff # 考虑负数的存在 a=a & x b=b & x wh...
2021-08-12 18:01:17 83
原创 统计一个数字在排序数组中出现的次数。
示例 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 108
原创 剑指 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 84
原创 剑指 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 49
原创 剑指 Offer 45. 把数组排成最小的数
难度中等257 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 示例 1: 输入: [10,2] 输出: "102" 示例2: 输入: [3,30,34,5,9] 输出: "3033459" x+y>y+x ,x,y为str,则x》y class Solution: def minNumber(self, nums: List[int]) -> str: for i in range(len(n...
2021-08-11 18:50:43 104
原创 剑指 Offer 57 - II. 和为s的连续正数序列
难度简单302 输入一个正整数target,输出所有和为target的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 示例 1: 输入:target = 9 输出:[[2,3,4],[4,5]] 示例 2: 输入:target = 15 class Solution: def findContinuousSequence(self, target: int) -> List[List[int]]: ...
2021-08-11 12:40:35 90
原创 剑指 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 71
原创 剑指 Offer 36. 二叉搜索树与双向链表
难度中等283 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 为了让您更好地理解问题,以下面的二叉搜索树为例: 我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。 下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。 特别地,我们希望可以就地完成..
2021-08-10 22:34:55 78
原创 剑指 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 77
原创 剑指 Offer 37. 序列化二叉树
请实现两个函数,分别用来序列化和反序列化二叉树。 你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。 提示:输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。 示例: 输入:root = [1,2,3,null,null,4,5] 输出:[1,...
2021-08-09 22:19:26 105
原创 剑指 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 输出:6 class Solution: def countDigitOne(self, n: int) -> int: base=1 s=0 while base<...
2021-08-09 22:18:34 81
原创 剑指 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 61
原创 剑指 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 51
原创 剑指 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 82
原创 剑指 Offer 25. 合并两个排序的链表
① 96. 不同的二叉搜索树 难度中等1234 给你一个整数n,求恰由n个节点组成且节点值从1到n互不相同的二叉搜索树有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3 输出:5 示例 2: 输入:n = 1 输出:1 ...
2021-08-07 22:10:08 47
原创 剑指 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 149
原创 剑指 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 51
原创 剑指 Offer 34. 二叉树中和为某一值的路径
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。 示例: 给定如下二叉树,以及目标和target = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1 返回: [ [5,4,11,2], ...
2021-08-07 16:49:42 133
原创 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 = None class Solution: def reversePrint(self, h
2021-08-04 22:33:47 57
原创 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 83
原创 动态规划⑥
① 300. 最长递增子序列 难度中等1743 给你一个整数数组nums,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。 示例 1: 输入:nums = [10,9,2,5,3,7,101,18] 输出:4 解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。 class Solution: def lengthO...
2021-07-31 18:37:17 121
原创 动态规划⑤
① 1292. 元素和小于等于阈值的正方形的最大边长 难度中等66收藏分享切换为英文接收动态反馈 给你一个大小为m x n的矩阵mat和一个整数阈值threshold。 请你返回元素总和小于或等于阈值的正方形区域的最大边长;如果没有这样的正方形区域,则返回0。 示例 1: 输入:mat = [[1,1,3,2,4,3,2],[1,1,3,2,4,3,2],[1,1,3,2,4,3,2]], threshold = 4 输出:2 解释:总和小于或等于 4 的正方形的最大边长...
2021-07-24 23:59:21 250
原创 二叉树练习
① 96. 不同的二叉搜索树 难度中等1234 给你一个整数n,求恰由n个节点组成且节点值从1到n互不相同的二叉搜索树有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3 输出:5 示例 2: 输入:n = 1 输出:1 123456,以3为根节点,左边有2种,右边有3种,总的为2*3 class Solution: def numTrees(self, n: int) -> int: dp=[0]*(n...
2021-07-20 22:12:54 94
原创 动态规划四
①139. 单词拆分 难度中等1061 给定一个非空字符串s和一个包含非空单词的列表wordDict,判定s是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 示例 2: 输入: s = "applepenapple", wordDict = ["apple", "pen"] 输出: true 解释: 返回 true 因为 示例 3: 输入: s = "catsandog", wordDict = ...
2021-07-19 23:13:26 750 2
原创 动态规划③
① 152. 乘积最大子数组 给你一个整数数组nums,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 示例 1: 输入: [2,3,-2,4] 输出: 6 解释:子数组 [2,3] 有最大乘积 6。 示例 2: 输入: [-2,0,-1] 输出: 0 解释:结果不能为 2, 因为 [-2,-1] 不是子数组。 # 考虑负数情况,需要一个数组来保存最小值 class Solution: def maxProduct(s...
2021-07-14 23:38:38 165 1
原创 动态规划二
①746. 使用最小花费爬楼梯 数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值cost[i](下标从 0 开始)。 每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。 请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。 示例1: 输入:cost = [10, 15, 20] 输出:15 解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 1...
2021-07-09 23:04:51 197 3
原创 shell 练习
①192. 统计词频 写一个 bash 脚本以统计一个文本文件words.txt中每个单词出现的频率。 为了简单起见,你可以假设: words.txt只包括小写字母和' '。 每个单词只由小写字母组成。 单词间由一个或多个空格字符分隔。 示例: 假设 words.txt 内容如下: the day is sunny the the the sunny is is 你的脚本应当输出(以词频降序排列): the 4 is 3 sunny 2 day 1 cat words.txt ...
2021-07-09 23:03:43 140
原创 回溯练习1
1219. 黄金矿工:https://leetcode-cn.com/problems/path-with-maximum-gold 你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 m * n 的网格 grid 进行了标注。每个单元格中的整数就表示这一单元格中的黄金数量;如果该单元格是空的,那么就是 0。 为了使收益最大化,矿工需要按以下规则来开采黄金: 每当矿工进入一个单元,就会收集该单元格中的所有黄金。 矿工每次可以从当前位置向上下左右四个方向走。 每个单元格只能被开采(进
2021-06-27 23:23:55 144
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人