算法刷题
孑渡
计算所2022新生
展开
-
【LeetCode】每日一题:跳跃游戏 II
给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:i + j < n返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。原创 2024-07-05 13:52:37 · 329 阅读 · 0 评论 -
【LeetCode】每日一题:跳跃游戏
给你一个非负整数数组 nums ,你最初位于数组的 第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回 true;否则,返回 false。原创 2024-07-05 13:40:00 · 464 阅读 · 0 评论 -
【LeetCode】每日一题:买卖股票的最佳时机 II
给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。返回 你能获得的 最大 利润。原创 2024-07-05 13:31:23 · 181 阅读 · 0 评论 -
【LeetCode】每日一题:删除有序数组中的重复项 II
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝。原创 2024-07-05 13:24:00 · 167 阅读 · 0 评论 -
【LeetCode】每日一题:岛屿数量
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。原创 2024-06-27 11:13:23 · 217 阅读 · 0 评论 -
【LeetCode】每日一题:相交链表
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构。原创 2024-06-27 10:34:22 · 322 阅读 · 0 评论 -
【LeetCode】每日一题:二叉树的锯齿形层序遍历
给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。原创 2024-06-27 10:23:44 · 306 阅读 · 0 评论 -
【LeetCode】每日一题:K个一组反转链表
官方题解单独考虑了一个反转链表,然后把头尾返回,相当于把这个链表插回去。其实更像一个模拟题,但是有两个地方的边界一直没有处理好导致卡了很久。原创 2024-06-27 10:00:26 · 336 阅读 · 0 评论 -
【LeetCode】每日一题:三数之和
最开始是打算沿着二数之和的思路做,即固定了最大的,然后小的开始遍历,因为这种遍历方式只需要遍历一轮就能完成,所以复杂度应该是O(n2),但是最后几个示例还是超时了,可能进一步优化还是可以做的。但是事实上,我最开始就在寻找一个能够约束剩余两个变量的方法,因为不重复我们可以添加大小关系的假设,但是脑子里一直是两个指针在一个遍历中移动所以没搞出来。事实上是,一个变量变大,另一个变量的上限减小,可以基于这个想法做。原创 2024-06-27 00:25:03 · 304 阅读 · 0 评论 -
【LeetCode】每日一题:两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。原创 2024-06-26 23:42:10 · 276 阅读 · 0 评论 -
【LeetCode】每日一题:反转链表
循环的方法需要注意prev应该是None开始,然后到结束的时候prev是tail,递归的思路很难绕过弯来,主要在于很难想清楚为什么可以返回尾节点,需要多做递归题,以及递归过程中,可以不使用尾节点来找当前递归位置,用head结点即可,多用边界情况推理。原创 2024-06-26 20:29:48 · 302 阅读 · 0 评论 -
【LeetCode】每日一题:合并K个升序链表
给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。原创 2024-06-26 20:11:34 · 357 阅读 · 0 评论 -
【LeetCode】每日一题:数组中的第K大的元素
给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。原创 2024-06-26 19:42:27 · 312 阅读 · 0 评论 -
【LeetCode】每日一题:LRU缓存
请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。实现 LRUCache 类:LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1。void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value;如果不存在,则向缓存中插入该组 key-value。原创 2024-06-26 12:46:08 · 381 阅读 · 0 评论 -
【LeetCode】每日一题:无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串的长度。原创 2024-06-26 12:44:39 · 242 阅读 · 0 评论 -
【LeetCode】每日一题:二叉树的层次遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历。(即逐层地,从左到右访问所有节点)。原创 2024-06-26 11:15:17 · 297 阅读 · 0 评论 -
【LeetCode】每日一题:排序链表
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表。原创 2024-06-25 22:54:24 · 956 阅读 · 0 评论 -
【LeetCode】合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。原创 2024-06-25 22:27:31 · 225 阅读 · 0 评论 -
【LeetCode】每日一题:对链表进行插入排序
给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头。插入排序 算法的步骤:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。下面是插入排序算法的一个图形示例。部分排序的列表(黑色)最初只包含列表中的第一个元素。每次迭代时,从输入数据中删除一个元素(红色),并就地插入已排序的列表中。原创 2024-06-25 22:12:01 · 219 阅读 · 0 评论 -
【LeetCode】每日一题:最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。原创 2024-06-25 17:18:46 · 234 阅读 · 0 评论 -
【LeetCode】每日一题:搜索旋转数组
整数数组 nums 按升序排列,数组中的值 互不相同。在传递给函数之前,nums 在预先未知的某个下标 k(0原创 2024-06-25 16:24:26 · 147 阅读 · 0 评论 -
【LeetCode】每日一题:判断子序列
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。原创 2024-06-24 23:45:38 · 239 阅读 · 0 评论 -
【LeetCode】每日一题:验证回文字符串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串。字母和数字都属于字母数字字符。给你一个字符串 s,如果它是 回文串 ,返回 true;否则,返回 false。原创 2024-06-24 22:04:43 · 1057 阅读 · 0 评论 -
【LeetCode】Hot100:验证二叉搜索树
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。英文题目。原创 2024-06-22 21:43:54 · 233 阅读 · 0 评论 -
【LeetCode】每日一题:1953.你可以工作的最大周数
给你 n 个项目,编号从 0 到 n - 1。同时给你一个整数数组 milestones ,其中每个 milestones[i] 表示第 i 个项目中的阶段任务数量。你可以按下面两个规则参与项目中的工作:每周,你将会完成 某一个 项目中的 恰好一个 阶段任务。你每周都 必须 工作。在 连续的 两周中,你 不能 参与并完成同一个项目中的两个阶段任务。一旦所有项目中的全部阶段任务都完成,或者仅剩余一个阶段任务都会导致你违反上面的规则,那么你将 停止工作。原创 2024-05-16 09:47:46 · 352 阅读 · 0 评论 -
【LeetCode】每日一题:2244.完成所有任务需要的最少轮数
给你一个下标从 0 开始的整数数组 tasks ,其中 tasks[i] 表示任务的难度级别。在每一轮中,你可以完成 2 个或者 3 个 相同难度级别 的任务。返回完成所有任务需要的 最少 轮数,如果无法完成所有任务,返回 -1。原创 2024-05-14 12:20:59 · 232 阅读 · 0 评论 -
【LeetCode】每日一题:994.腐烂的橘子
在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。返回 直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。只想到了类似模拟的bfs,没想到答案也是这样做的,感觉有一点点蠢,不过看了官方题解的做法还是有一些可以学习的东西的。原创 2024-05-13 11:39:45 · 490 阅读 · 1 评论 -
【LeetCode】面试经典150题:189.轮转数组
因此需要nums[:]的方式来在原地址上进行修改。输入: nums = [1,2,3,4,5,6,7], k = 3。输入:nums = [-1,-100,3,99], k = 2。向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]向右轮转 1 步: [99,-1,-100,3]向右轮转 2 步: [3,99,-1,-100]输出: [5,6,7,1,2,3,4]输出:[3,99,-1,-100]原创 2024-05-10 12:22:31 · 197 阅读 · 0 评论 -
【LeetCode】每日一题:2960. 统计已测试设备
将下标在 [i + 1, n - 1] 的所有设备的电池百分比减少 1,确保它们的电池百分比 不会低于 0 ,即 batteryPercentages[j] = max(0, batteryPercentages[j] - 1)。水题,但是第一遍写的时候直接batteryPercentages[i]-i没考虑移动到下一设备不执行测试了,需要核对一遍要求是否都满足了。给你一个长度为 n 、下标从 0 开始的整数数组 batteryPercentages ,表示 n 个设备的电池百分比。原创 2024-05-10 09:58:06 · 335 阅读 · 0 评论 -
【Leetcode】741.摘樱桃
从位置 (0, 0) 出发,最后到达 (n - 1, n - 1) ,只能向下或向右走,并且只能穿越有效的格子(即只可以穿过值为 0 或者 1 的格子);最初的理解版本是以为agent可以反复走到开头,因此比较像一个水把整个容器灌满看看能摘到多少樱桃的感觉,所以只需要遍历得到一个和grid同尺寸的mask,当到达 (n - 1, n - 1) 后,你要继续走,直到返回到 (0, 0) ,只能向上或向左走,并且只能穿越有效的格子;,若是荆棘则置0。1 表示这个格子里装着一个樱桃,你可以摘到樱桃然后穿过它。原创 2024-05-08 16:00:04 · 690 阅读 · 0 评论 -
【Leetcode】剑指Offer 34:二叉树中和为某一值的路径
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。原创 2022-09-26 09:21:41 · 683 阅读 · 2 评论 -
【Leetcode】剑指Offer 33:二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树:5/2 6/1 3示例 1:输入: [1,6,3,2,5]输出: false示例 2:输入: [1,3,2,6,5]输出: true提示:数组长度原创 2022-09-25 08:44:58 · 579 阅读 · 0 评论 -
【Leetcode】剑指Offer 32-III: 从上到下打印二叉树 III
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如:给定二叉树: [3,9,20,null,null,15,7],3/9 20/15 7返回其层次遍历结果:[[3],[20,9],[15,7]]提示:节点总数原创 2022-09-24 18:16:41 · 649 阅读 · 0 评论 -
【Leetcode】剑指Offer 32-II: 从上到下打印二叉树 II
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树: [3,9,20,null,null,15,7],3/9 20/15 7返回其层次遍历结果:[[3],[9,20],[15,7]]提示:节点总数原创 2022-09-23 16:14:07 · 490 阅读 · 0 评论 -
【Leetcode】剑指Offer 32-I:从上到下打印二叉树
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树: [3,9,20,null,null,15,7],3/9 20/15 7返回:提示:节点总数原创 2022-09-22 11:35:20 · 925 阅读 · 0 评论 -
【Leetcode】剑指Offer 31:栈的压入、弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。原创 2022-09-21 09:16:21 · 463 阅读 · 0 评论 -
【Leetcode】剑指Offer 30:包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:--> 返回 -3.--> 返回 0.--> 返回 -2.提示:各函数的调用总次数不超过 20000 次来源:力扣(LeetCode)链接:https://leetcode.cn/problems/bao-han-minhan-shu-de-zhan-lcof著作权归领扣网络所有。原创 2022-09-20 11:31:18 · 467 阅读 · 0 评论 -
【Leetcode】剑指Offer 29:顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制:来源:力扣(LeetCode)原创 2022-09-19 09:51:23 · 593 阅读 · 0 评论 -
【Leetcode】剑指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示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:root = [1,2,2,null,3,null,3]原创 2022-09-16 13:51:16 · 400 阅读 · 0 评论 -
【Leetcode】剑指Offer 27:二叉树的镜像
请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入:4/2 7/ \ /镜像输出:4/7 2/ \ /示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]限制:0原创 2022-09-15 11:18:20 · 1214 阅读 · 0 评论