![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode刷题
文章平均质量分 61
此去经年ToT
这个作者很懒,什么都没留下…
展开
-
BM52 数组中只出现一次的两个数字
一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。数据范围:数组长度 2≤𝑛≤10002≤n≤1000,数组中每个数的大小 0<𝑣𝑎𝑙≤10000000<val≤1000000要求:空间复杂度 𝑂(1)O(1),时间复杂度 𝑂(𝑛)O(n)提示:输出时按非降序排列。原创 2024-07-23 19:41:20 · 269 阅读 · 0 评论 -
BM35 判断是不是完全二叉树
给定一个二叉树,确定他是否是一个完全二叉树。完全二叉树的定义:若二叉树的深度为 h,除第 h 层外,其它各层的结点数都达到最大个数,第 h 层所有的叶子结点都连续集中在最左边,这就是完全二叉树。原创 2024-07-23 18:48:41 · 158 阅读 · 0 评论 -
BM51 数组中出现次数超过一半的数字
给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。数据范围:𝑛≤50000n≤50000,数组中元素的值 0≤𝑣𝑎𝑙≤100000≤val≤10000要求:空间复杂度:𝑂(1)O(1),时间复杂度 𝑂(𝑛)O(n)原创 2024-07-22 20:54:44 · 244 阅读 · 0 评论 -
BM36 判断是不是平衡二叉树
输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。样例解释:样例二叉树如图,为一颗平衡二叉树注:我们约定空树是平衡二叉树。数据范围:𝑛≤100n≤100,树上节点的val值满足 0≤𝑛≤10000≤n≤1000要求:空间复杂度𝑂(1)O(1),时间复杂度 𝑂(𝑛)O(n)原创 2024-07-21 20:41:56 · 187 阅读 · 0 评论 -
BM34 判断是不是二叉搜索树
给定一个二叉树根节点,请你判断这棵树是不是二叉搜索树。二叉搜索树满足每个节点的左子树上的所有节点均小于当前节点且右子树上的所有节点均大于当前节点。例:图1图2数据范围:节点数量满足 1≤𝑛≤104 1≤n≤104 ,节点上的值满足 −231≤𝑣𝑎𝑙≤231−1 −231≤val≤231−1。原创 2024-07-21 17:50:33 · 373 阅读 · 0 评论 -
101.对称二叉树
给你一个二叉树的根节点root, 检查它是否轴对称。原创 2024-07-20 20:50:02 · 299 阅读 · 0 评论 -
226.翻转二叉树
给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。原创 2024-07-20 20:31:42 · 691 阅读 · 0 评论 -
BM20 数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。即输出P mod 1000000007数据范围: 对于 50%50% 的数据, 𝑠𝑖𝑧𝑒≤104size≤104对于 100%100% 的数据, 𝑠𝑖𝑧𝑒≤105size≤105数组中所有数字的值满足 0≤𝑣𝑎𝑙≤1090≤val≤109要求:空间复杂度 𝑂(𝑛)O(n),时间复杂度 𝑂(𝑛𝑙𝑜𝑔𝑛)O(nlogn)原创 2024-07-19 16:20:34 · 429 阅读 · 0 评论 -
2815.数组中的最大数对和
给你一个下标从开始的整数数组nums。请你从nums中找出和的一对数,且这两个数数位上最大的数字相等。返回最大和,如果不存在满足题意的数字对,返回-1。88i = 1 和 j = 2 ,nums[i] 和 nums[j] 数位上最大的数字相等,且这一对的总和 71 + 17 = 88。i = 3 和 j = 4 ,nums[i] 和 nums[j] 数位上最大的数字相等,且这一对的总和 24 + 42 = 66。可以证明不存在其他数对满足数位上最大的数字相等,所以答案是 88。-1。原创 2024-07-19 16:08:55 · 301 阅读 · 0 评论 -
153. 寻找旋转排序数组中的最小值
已知一个长度为n的数组,预先按照升序排列,经由1到n次后,得到输入数组。例如,原数组47注意,数组的结果为数组。给你一个元素值的数组nums,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的。你必须设计一个时间复杂度为O(log n)的算法解决此问题。1原数组为 [1,2,3,4,5] ,旋转 3 次得到输入数组。0原数组为 [0,1,2,4,5,6,7] ,旋转 3 次得到输入数组。11原数组为 [11,13,15,17] ,旋转 4 次得到输入数组。原创 2024-07-18 10:31:58 · 253 阅读 · 0 评论 -
162.寻找峰值
峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回所在位置即可。你可以假设。你必须实现时间复杂度为O(log n)的算法来解决此问题。nums =[1,2,3,1]23 是峰值元素,你的函数应该返回其索引 2。nums =1 或 5你的函数可以返回索引 1,其峰值元素为 2;或者返回索引 5, 其峰值元素为 6。i。原创 2024-07-16 22:30:50 · 358 阅读 · 0 评论 -
2956.找到两个数组中的公共元素
给你两个下标从开始的整数数组nums1和nums2,它们分别含有n和m个元素。answer1nums1[i]nums2ianswer2nums2[i]nums1i返回。[2,1][3,4]nums1中下标在 1,2,3 的元素在nums2中也存在。所以answer1为 3。nums2中下标在 0,1,3,4 的元素在nums1中也存在。所以answer2为 4。[0,0]nums1和nums2中没有相同的数字,所以答案是 [0,0]。原创 2024-07-16 22:21:06 · 200 阅读 · 0 评论 -
BM7 链表中环的入口结点
给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。数据范围: 𝑛≤10000n≤10000,1<=结点值<=100001<=结点值<=10000要求:空间复杂度 𝑂(1)O(1),时间复杂度 𝑂(𝑛)O(n)例如,输入{1,2},{3,4,5}时,对应的环形链表如下图所示:可以看到环的入口结点的结点值为3,所以返回结点值为3的结点。原创 2024-07-14 19:05:32 · 168 阅读 · 0 评论 -
2.两数相加
给你两个的链表,表示两个非负的整数。它们每位数字都是按照的方式存储的,并且每个节点只能存储数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。原创 2024-07-13 09:29:20 · 198 阅读 · 0 评论 -
2974.最小数字游戏
你有一个下标从开始、长度为的整数数组nums,同时还有一个空数组arr。Alice 和 Bob 决定玩一个游戏,游戏中每一轮 Alice 和 Bob 都会各自执行一次操作。numsarrnums返回结果数组arr。[3,2,5,4]第一轮,Alice 先移除 2 ,然后 Bob 移除 3。然后 Bob 先将 3 添加到 arr 中,接着 Alice 再将 2 添加到 arr 中。于是 arr = [3,2]。第二轮开始时,nums = [5,4]。Alice 先移除 4 ,然后 Bob 移除 5。原创 2024-07-12 21:02:22 · 458 阅读 · 0 评论 -
46.全排列
给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以返回答案。原创 2024-07-12 10:44:29 · 358 阅读 · 0 评论 -
35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为O(log n)的算法。214。原创 2024-07-09 20:20:08 · 351 阅读 · 0 评论 -
1509.三次操作后最大值与最小值的最小差
给你一个数组nums。每次操作你可以选择nums中的任意一个元素并将它改成。在,返回nums中最大值与最小值的最小差值。0我们最多可以走 3 步。第一步,将 2 变为 3。nums 变成 [5,3,3,4]。第二步,将 4 改为 3。nums 变成 [5,3,3,3]。第三步,将 5 改为 3。nums 变成 [3,3,3,3]。执行 3 次移动后,最小值和最大值之间的差值为 3 - 3 = 0。1我们最多可以走 3 步。第一步,将 5 改为 0。nums变成 [1,0,0,10,14]原创 2024-07-08 10:43:39 · 509 阅读 · 0 评论 -
724.寻找数组的中心下标
给你一个整数数组nums,请计算数组的。数组是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为0,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个中心下标,应该返回的那一个。如果数组不存在中心下标,返回-1。3中心下标是 3。左侧数之和 sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11 ,原创 2024-07-08 08:48:46 · 369 阅读 · 0 评论 -
3033.修改矩阵
对于每一列,遍历每一行,求出列最大值,记为colMax,然后第二次遍历每一行,将值为-1的位置修改为colMax。- 将单元格 [1][1] 中的值替换为列 1 中的最大值 8。- 将单元格 [0][2] 中的值替换为列 2 中的最大值 9。上图显示了发生替换的元素(蓝色区域)。上图显示了发生替换的元素(蓝色区域)。相等,接着将其中每个值为。的元素替换为所在列的。原创 2024-07-05 14:27:23 · 357 阅读 · 0 评论 -
1027.最长等差数列
给你一个整数数组nums,返回nums中最长等差子序列的。回想一下,nums的子序列是一个列表,且。并且如果) 的值都相同,那么序列seq是等差的。4整个数组是公差为 3 的等差数列。3最长的等差子序列是 [4,7,10]。4最长的等差子序列是 [20,15,10,5]。原创 2024-07-06 12:14:55 · 218 阅读 · 0 评论 -
100359.统计X和Y频数相等的子矩阵数量
给你一个二维字符矩阵grid,其中grid[i][j]可能是'X''Y'或'.''Y''X'30不存在满足'X'和'Y'频数相等的子矩阵。原创 2024-07-07 11:59:59 · 515 阅读 · 0 评论 -
3101.交替子数组计数
这题使用动态规划的解法很容易想到递推公式,dp数组的含义dp[i]表示以i为结束位置的交替子数组的个数,每一个长度为1的子数组都是交替子数组,因此初始化dp数组中的所有值为1,然后就是递推式的推理,我们可以发现,如果当前位置i和前一个位置i-1的元素具有不同的值,那么dp[i] = dp[i-1]+1,否则就不修改dp[i],只需一次遍历,就可以将以每一个位置为结尾的子数组的个数求和得到最终的结果res。数组的每个子数组都是交替子数组。可以统计在内的子数组共有 10 个。中交替子数组的数量。原创 2024-07-06 09:53:19 · 121 阅读 · 0 评论 -
993. 二叉树的堂兄弟节点 + 2641. 二叉树的堂兄弟节点 II
我们要计算所有点的堂兄的和,就需要使用层序遍历,先求出下一层所有结点的和nextLevelSum,然后再通过一次遍历,遍历当前层的所有结点,并计算出当前节点的左右孩子的和curSum,接下来就可以更新当前节点的左右孩子,即用nextLevelSum - curSum就是当前节点左右孩子的所有堂兄弟结点的和。这一题相对上一题就复杂了一点,不只是需要判断某两个点是否为堂兄弟,而是需要将所有点的值都更新为它的堂兄弟的结点的和。,一个节点的深度指的是从树根节点到这个节点经过的边数。的节点的子节点位于深度。原创 2024-07-04 18:19:02 · 1173 阅读 · 0 评论 -
LCP61.气温变化趋势
组委会希望找到一段天数尽可能多,且两地气温变化趋势相同的时间举办嘉年华活动。否则,表明当前序列已经不再连续了,需要记录此时序列的长度,并且将右端点右移,且令左端点的指向当前右端点。力扣城计划在两地设立「力扣嘉年华」的分会场,气象小组正在分析两地区的气温变化趋势,对于第。如果当前当前遍历到的j+1与j下标处的元素大小相等或者具有相同的趋势,则移动右端点j。注:当遍历结束后,仍然需要判断一次j-i对应的序列是否为最长的。使用i,j两个指针分别记录最大相同变化趋势序列的左右端点。天之间,两地气温变化趋势相同。原创 2024-06-21 20:57:16 · 139 阅读 · 0 评论 -
2476.二叉搜索树最近节点查询
DFS,二分查找原创 2022-11-23 08:55:26 · 112 阅读 · 0 评论 -
791.自定义字符串排序
python按字典value顺序排列原创 2022-11-13 09:21:38 · 156 阅读 · 0 评论 -
leetcode 链表相交
双指针求单链表交集首个元素原创 2022-11-12 16:44:28 · 92 阅读 · 0 评论 -
856.括号的分数
856.括号的分数原创 2022-10-09 10:05:16 · 81 阅读 · 0 评论 -
508.出现次数最多的子树元素和
这题最容易想到的解法就是逐个元素求子树元素和,并将求得的结果作为key放入字典中,最后从values中找到一个出现次数最多的key,再遍历字典,把value=max_count的key存入ans中返回,就可以得到出现次数最多,可能有相同出现次数的一个子树元素和列表。 不过时间复杂度和空间复杂度都不是很理想,这种暴力求解的方式虽然直观,但效率太低。...原创 2022-06-19 08:57:16 · 102 阅读 · 0 评论 -
1823.找出游戏的获胜者
题目描述共有 n 名小伙伴一起做游戏。小伙伴们围成一圈,按 顺时针顺序 从 1 到 n 编号。确切地说,从第 i 名小伙伴顺时针移动一位会到达第 (i+1) 名小伙伴的位置,其中 1 <= i < n ,从第 n 名小伙伴顺时针移动一位会回到第 1 名小伙伴的位置。游戏遵循如下规则:从第 1 名小伙伴所在位置 开始 。沿着顺时针方向数 k 名小伙伴,计数时需要 包含 起始时的那位小伙伴。逐个绕圈进行计数,一些小伙伴可能会被数过不止一次。你数到的最后一名小伙伴需要离开圈子,并视作原创 2022-05-04 18:16:11 · 116 阅读 · 0 评论 -
398.随机数索引
题目描述给定一个可能含有重复元素的整数数组,要求随机输出给定的数字的索引。 您可以假设给定的数字一定存在于数组中。注意:数组大小可能非常大。 使用太多额外空间的解决方案将不会通过测试。示例:int[] nums = new int[] {1,2,3,3,3};Solution solution = new Solution(nums);// pick(3) 应该返回索引 2,3 或者 4。每个索引的返回概率应该相等。solution.pick(3);// pick(1)原创 2022-04-25 08:11:59 · 98 阅读 · 0 评论 -
868.二进制间距(python)
题目描述给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,"1001" 中的两个 1 的距离为 3 。示例 1:输入:n = 22输出:2解释:22 的二进制是 "10110" 。在 22 的二进制表示中,有三个 1,组成两对相邻的 1 。第一对相邻的 1 中,原创 2022-04-24 07:18:09 · 237 阅读 · 0 评论 -
396.旋转函数
题目描述给定一个长度为 n 的整数数组nums。假设arrk是数组nums顺时针旋转 k 个位置后的数组,我们定义nums的 旋转函数F为:F(k) = 0 * arrk[0] + 1 * arrk[1] + ... + (n - 1) * arrk[n - 1]返回F(0), F(1), ..., F(n-1)中的最大值。生成的测试用例让答案符合32 位 整数。示例 1:输入: nums = [4,3,2,6]输出: 26解释:F(0) =...原创 2022-04-22 08:38:25 · 174 阅读 · 0 评论 -
5.最长回文子串 && 647.回文子串 (python)
题目描述5.最长回文子串给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic-substring著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。647.回文子串给你.原创 2022-04-21 13:14:23 · 541 阅读 · 1 评论 -
386.字典序排数(python)
题目描述给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。示例 1:输入:n = 13输出:[1,10,11,12,13,2,3,4,5,6,7,8,9]示例 2:输入:n = 2输出:[1,2]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/lexicographical-numbers著作权归领扣网络所有。商业转载请联系官方授权,原创 2022-04-18 11:49:17 · 1049 阅读 · 0 评论 -
819.最常见的单词
题目描述给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。题目保证至少有一个词不在禁用列表中,而且答案唯一。禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。答案都是小写字母。示例:输入:paragraph = "Bob hit a ball, the hit BALL flew far after it was hit."banned = ["hit"]输出: "ball"解释:..原创 2022-04-17 08:15:49 · 130 阅读 · 0 评论 -
155.最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。实现 MinStack 类:MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int getMin() 获取堆栈中的最小元素。示例 1:输入:["MinStack","push","push","push","getMin","pop","top","getMin"].原创 2022-04-14 11:16:47 · 107 阅读 · 0 评论 -
380.O(1)时间插入、删除和获取随机元素
题目描述实现RandomizedSet 类:RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false 。int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。每个元素应原创 2022-04-13 12:53:48 · 871 阅读 · 0 评论 -
806.写字符串需要的行数
题目描述我们要把给定的字符串 S从左到右写到每一行上,每一行的最大宽度为100个单位,如果我们在写某个字母的时候会使这行超过了100 个单位,那么我们应该把这个字母写到下一行。我们给定了一个数组widths,这个数组widths[0] 代表 'a' 需要的单位,widths[1] 代表 'b' 需要的单位,...,widths[25] 代表 'z' 需要的单位。现在回答两个问题:至少多少行能放下S,以及最后一行使用的宽度是多少个单位?将你的答案作为长度为2的整数列表返回。示例 1:...原创 2022-04-12 12:18:13 · 88 阅读 · 0 评论