![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
文章平均质量分 72
leetcode
我不会起名字呀
这个作者很懒,什么都没留下…
展开
-
(C卷,100分)- 最长子字符串的长度(一)、leetcode1371.每个元音包含偶数次的最长子字符串、最长子字符串的长度(二)
给你一个字符串 s,首尾相连成一个环形,请你在环中找出 ‘o’ 字符出现了偶数次最长子字符串的长度。原创 2024-09-01 23:00:18 · 899 阅读 · 0 评论 -
leetcode60.不同路径
这里要看一下递推公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1],dp[i][j]都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了。那么很自然,dp[i][j] = dp[i - 1][j] + dp[i][j - 1],因为dp[i][j]只有这两个方向过来。这样就可以保证推导dp[i][j]的时候,dp[i - 1][j] 和 dp[i][j - 1]一定是有数值的。dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。原创 2024-08-29 21:21:41 · 728 阅读 · 0 评论 -
0-1背包问题
放物品i:由dp[i - 1][j - weight[i]]推出,dp[i - 1][j - weight[i]] 为背包容量为j - weight[i]的时候不放物品i的最大价值,那么dp[i - 1][j - weight[i]] + value[i] (物品i的价值),就是背包放物品i得到的最大价值。所以递归公式: dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);那么可以有两个方向推出来dp[i][j],原创 2024-08-20 21:00:24 · 582 阅读 · 0 评论 -
leetcode70.爬楼梯
我们是从第 0 级开始爬的,所以从第 0 级爬到第 0 级我们可以看作只有一种方案,即 f(0)=1;我们不妨写几项来验证一下,根据转移方程得到 f(2)=2,f(3)=3,f(4)=5,……它意味着爬到第 x 级台阶的方案数是爬到第 x−1 级台阶的方案数和爬到第 x−2 级台阶的方案数的和。很好理解,因为每次只能爬 1 级或 2 级,所以 f(x) 只能从 f(x−1) 和 f(x−2) 转移过来,而这里要统计方案总数,我们就需要对这两项的贡献求和。3. 1 阶 + 1 阶 + 1 阶。原创 2024-08-19 23:44:37 · 252 阅读 · 0 评论 -
leetcode509.斐波那契数
由于 F(n) 只和 F(n−1) 与 F(n−2) 有关,因此可以使用「滚动数组思想」把空间复杂度优化成 O(1)。斐波那契数的边界条件是 F(0)=0 和 F(1)=1。F(n) = F(n - 1) + F(n - 2),其中 n > 1。解释:F(2) = F(1) + F(0) = 1 + 0 = 1。解释:F(3) = F(2) + F(1) = 1 + 1 = 2。解释:F(4) = F(3) + F(2) = 2 + 1 = 3。给定 n ,请计算 F(n)。原创 2024-08-18 01:50:02 · 310 阅读 · 0 评论 -
华为OD机试(C卷,200分)- 计算疫情扩散时间
在一个地图中(地图由n*n个区域组成),有部分区域被感染病菌。感染区域每天都会把周围(上下左右)的4个区域感染。请根据给定的地图计算,多少天以后,全部区域都会被感染。如果初始地图上所有区域全部都被感染,或者没有被感染区域,返回-1。原创 2024-08-13 23:43:20 · 806 阅读 · 0 评论 -
leetcode695.岛屿的最大面积
输入:grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]]我们找到一个单元格后,即找到一个岛屿。原创 2024-08-13 23:11:39 · 397 阅读 · 0 评论 -
leetcode695.岛屿最大面积、华为OD机试(C卷,200分)- 可以组成网络的服务器
就再去其上下左右找下一个服务器,当找到新服务器,再递归去找其上下左右,按此逻辑,就像拔地瓜藤一样,一下子把所有地瓜都拔出来。在一个机房中,服务器的位置标识在 n*m 的整数矩阵网格中,1 表示单元格上有服务器,0 表示没有。用ans统计每个局域网包含的服务器个数,每找到一个局域网包含的服务器个数大于当前局域网,则更新ans。说明 [0][0]、[1][0]、[1][1]三台服务器相互连接,可以组成局域网。不同之处在于统计的是最大局域网包含的服务器个数,而不是所有局域网个数。最大局域网包含的服务器个数。原创 2024-08-03 23:25:38 · 367 阅读 · 0 评论 -
leetcode200.岛屿数量(C语言)
为了求出岛屿的数量,我们可以扫描整个二维网格。在深度优先搜索的过程中,每个搜索到的 1 都会被重新标记为 0。给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。我们可以将二维网格看成一个无向图,竖直或水平相邻的 1 之间有边相连。grid[i][j] 的值为 ‘0’ 或 ‘1’最终岛屿的数量就是我们进行深度优先搜索的次数。此外,你可以假设该网格的四条边均被水包围。输入:grid = [原创 2024-08-03 22:56:03 · 273 阅读 · 0 评论 -
leetcode150.逆波兰表达式求值
给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。输入:tokens = [“10”,“6”,“9”,“3”,“+”,“-11”,“解释:该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6。解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9。输入:tokens = [“4”,“13”,“5”,“/”,“+”]输入:tokens = [“2”,“1”,“+”,“3”,“*”]有效的算符为 ‘+’、‘-’、‘*’ 和 ‘/’。原创 2024-08-02 22:12:56 · 325 阅读 · 0 评论 -
华为od机试(C卷,100分)-找朋友、 转盘寿司
在学校中,N 个小朋友站成一队, 第 i 个小朋友的身高为height[i],第 i 个小朋友可以看到的第一个比自己身高更高的小朋友 j ,那么 j 是 i 的好朋友(要求j > i)。请输出一个数组,对应位置的输出是每个小朋友的好朋友位置,如果没有看到好朋友,则输出0。原创 2024-08-02 00:02:03 · 559 阅读 · 0 评论 -
leetcode1047.删除字符串所有相邻重复项、华为OD机试(C卷,100分)- 消消乐游戏、密码输入检测
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:“abbaca”输出:“ca”解释:例如,在 “abbaca” 中,我们可以删除 “bb” 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 “aaca”,其中又只有 “aa” 可以执行重复项删除操作,所以最后的字符串为 “ca”。原创 2024-08-01 23:35:14 · 1067 阅读 · 0 评论 -
leetcode1614.括号的最大嵌套深度、华为OD机试(C卷,100分)- 最大括号深度
给定 有效括号字符串 s,返回 s 的 嵌套深度。嵌套深度是嵌套括号的 最大 数量。示例 1:输入:s = “(1+(2*3)+((8)/4))+1”输出:3解释:数字 8 在嵌套的 3 层括号中。示例 2:输入:s = “(1)+((2))+(((3)))”输出:3解释:数字 3 在嵌套的 3 层括号中。示例 3:输入:s = “()(())((()()))”输出:3。原创 2024-08-01 18:45:49 · 426 阅读 · 0 评论 -
leetcode232.用栈实现队列
你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。2、出队:出栈为空入栈不空,则将入栈所有元素弹出到出栈中,出栈中栈顶元素为队头元素。再将出栈中所有元素加入入栈,以便下次使用。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。否则,返回 false。假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)4、队空:入栈为空出栈也为空。原创 2024-07-31 22:38:43 · 350 阅读 · 0 评论 -
leetcode225.用队列实现栈
你只能使用队列的标准操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。出栈:将队列的前size-1个元素依次加入队尾,输出第size个元素。int top() 返回栈顶元素。栈顶元素:即队尾最后一个元素。原创 2024-07-31 22:27:11 · 295 阅读 · 0 评论 -
leetcode面试题08.08有重复字符串的排列组合、华为OD(C卷,200分)- 考古学家
有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。示例1:输入:S = “qqe”输出:[“eqq”,“qeq”,“qqe”]示例2:输入:S = “ab”输出:[“ab”, “ba”]提示:字符都是英文字母。字符串长度在[1, 9]之间。原创 2024-07-22 23:46:20 · 409 阅读 · 0 评论 -
leetcode701.二叉树搜索树的插入操作
给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。输入:root = [4,2,7,1,3,null,null,null,null,null,null], val = 5。可以有,也可以没有,但递归函数如果没有返回值的话,实现是比较麻烦的,下面也会给出其具体实现代码。终止条件就是找到遍历的节点为null的时候,就是要插入节点的位置了,并把插入的节点返回。输出:[40,20,60,10,30,50,70,null,null,25]输出:[4,2,7,1,3,5]原创 2024-07-21 20:34:28 · 362 阅读 · 0 评论 -
leetcode106.从中序与后序遍历序列构造二叉树、leetcode105.从前序与中序遍历序列构造二叉树
给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树。示例 1:输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]输出:[3,9,20,null,null,15,7]示例 2:输入:inorder = [-1], postorder = [-1]输出:[-1]原创 2024-07-20 16:17:03 · 414 阅读 · 0 评论 -
二叉树的前、中、后序遍历(递归法、迭代法)leetcode144/94/145
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[1,2]示例 5:输入:root = [1,null,2]输出:[1,2]原创 2024-07-18 21:37:18 · 450 阅读 · 0 评论 -
leetcode496下一个更大元素I、503下一个更大元素II
nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。给你两个 没有重复元素 的数组 nums1 和 nums2 ,下标从 0 开始计数,其中nums1 是 nums2 的子集。对于每个 0原创 2024-07-16 22:12:15 · 871 阅读 · 0 评论 -
leetcode977有序数组的平方
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。解释:平方后,数组变为 [16,1,0,9,100]输入:nums = [-4,-1,0,3,10]输入:nums = [-7,-3,2,3,11]排序后,数组变为 [0,1,9,16,100]输出:[0,1,9,16,100]输出:[4,9,9,49,121]原创 2024-07-15 20:26:21 · 137 阅读 · 0 评论 -
leetcode209.长度最小的子数组
numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0。输入:target = 11, nums = [1,1,1,1,1,1,1,1]输入:target = 7, nums = [2,3,1,2,4,3]找出该数组中满足其总和大于等于 target 的长度最小的。输入:target = 4, nums = [1,4,4]解释:子数组 [4,3] 是该条件下的长度最小的子数组。原创 2024-07-14 15:10:22 · 127 阅读 · 0 评论 -
leetcode698-划分k个相等的子集、华为OD机试C卷(200分)-项目排期
给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。示例 1:输入: nums = [4, 3, 2, 3, 5, 2, 1], k = 4输出: True说明: 有可能将其分成 4 个子集(5),(1,4),(2,3),(2,3)等于总和。示例 2:输入: nums = [1,2,3,4], k = 3输出: false。原创 2024-07-13 00:51:36 · 864 阅读 · 0 评论 -
leetcode216.组合总和III、40.组合总和II、39.组合总和
找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:只使用数字1到9每个数字 最多使用一次返回 所有可能的有效组合的列表。该列表不能包含相同的组合两次,组合可以以任何顺序返回。示例 1:输入: k = 3, n = 7输出: [[1,2,4]]解释:没有其他符合的组合了。示例 2:输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]解释:没有其他符合的组合了。原创 2024-07-04 21:39:57 · 509 阅读 · 0 评论 -
leetcode46.全排列、47.全排列II
可以看出元素1在[1,2]中已经使用过了,但是在[2,1]中还要在使用一次1,所以处理排列问题就不用使用startIndex了。因为排列问题,每次都要从头开始搜索,例如元素1在[1,2]中已经使用过了,但是在[2,1]中还要再使用一次1。首先排列是有序的,也就是说 [1,2] 和 [2,1] 是两个集合,这和之前分析的子集以及组合所不同的地方。输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]给定n的范围是[1,9],给定k的范围是[1,n!原创 2024-07-03 20:29:16 · 479 阅读 · 0 评论 -
leetcode77.组合
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。原创 2024-07-03 16:42:27 · 232 阅读 · 0 评论 -
二叉树的前中后序遍历(递归法、迭代法)leetcode144、94/145
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[1,2]示例 5:输入:root = [1,null,2]输出:[1,2]提示:树中节点数目在范围 [0, 100] 内。原创 2024-07-02 12:10:31 · 633 阅读 · 0 评论 -
leetcode347.前k个高频元素
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]原创 2024-06-30 23:07:03 · 434 阅读 · 0 评论 -
优先队列(leetcode239滑动窗口最大值、华为OD机试C卷-执行任务赚积分)
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值。原创 2024-06-30 20:52:08 · 437 阅读 · 0 评论 -
二叉树的层序遍历/后序遍历(leetcode104二叉树的最大深度、111二叉树的最小深度)(华为OD悄悄话、数组二叉树)
给定一个二叉树 root ,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。本题可以使用前序(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序求的是高度。二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数或者节点数(取决于高度从0开始还是从1开始)原创 2024-06-29 18:13:10 · 1623 阅读 · 1 评论 -
LeetCode刷题(739/496/503)/华为od转盘寿司-单调栈
对于每个 0原创 2024-06-24 15:48:37 · 1114 阅读 · 0 评论 -
华为OD机试C卷(100分)-螺旋数字矩阵(C)/LeetCode59.螺旋矩阵II
给出数字个数 n (0 < n ≤ 999)和行数 m(0 < m ≤ 999),从左上角的 1 开始,按照顺时针螺旋向内写方式,依次写出2,3,…,n,最终形成一个 m 行矩阵。给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix。疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。输出:[[1,2,3],[8,9,4],[7,6,5]]说明 3个数字写5行,只有一列,数字不够用*号填充。两个整数,空格隔开,依次表示 n、m。原创 2024-06-17 00:50:52 · 489 阅读 · 0 评论