![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
文章平均质量分 68
LeoLei8060
从事C++/Qt开发工作
展开
-
LeetCode.68文本左右对齐
根据计算出的空格数构建每一行的字符串。对于非最后一行,每两个单词之间添加计算出的空格数。对于最后一行,单词之间添加一个空格,然后在行末添加足够的空格以达到。从当前索引开始,尽可能多地添加单词到当前行,直到添加下一个单词会使行长度超过。要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多于右侧的空格数。这个过程中,我们需要计算已包括的单词总长度加上必要的最小空格数(每两个单词之间至少一个空格)。” 来放置给定的单词;文本的最后一行应为左对齐,且单词之间不插入。原创 2024-07-02 09:35:00 · 382 阅读 · 0 评论 -
LeetCode.224基本计算器
逆波兰表示法是一种无需括号即可定义运算顺序的数学表达式表示方法,它利用栈的数据结构来处理操作符的优先级和括号,非常适合于解析和计算此类问题。注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如。,请你实现一个基本计算器来计算并返回它的值。给你一个字符串表达式。原创 2024-07-01 16:25:11 · 234 阅读 · 0 评论 -
LeetCode.76 最小覆盖子串
根据记录的最小窗口的位置和大小,返回最小覆盖子串。如果没有找到有效的子串,返回空字符串。指针的同时,检查当前窗口的大小,如果当前窗口的大小比已知的最小窗口小,更新最小窗口。指针来缩小窗口,直到窗口不再满足条件。在此过程中,记录可能的最小窗口。: 创建两个计数器或哈希表,一个用于。所有字符的子串,则返回空字符串。),一个用于当前窗口中的字符计数(,表示窗口的左右边界。中总共需要的不同字符种类数)。指针扩大窗口,直到窗口包含了。的所有字符),尝试通过移动。所有字符的最小子串。需求的字符种类数)和。原创 2024-06-29 22:10:17 · 286 阅读 · 0 评论 -
LeetCode.30 串联所有单词的子串
中所有单词组成,并且每个单词出现一次,才符合条件。这提示我们可以使用组合和检查的策略来找到这些子串。中所有字符串以任意顺序排列连接起来的子串。首先需要明确,只有当。原创 2024-06-29 22:01:17 · 346 阅读 · 0 评论 -
LeetCode.面试题17.24.最大子矩阵详解
首先,我们需要了解Kadane算法,这是一种用于在一维数组中找到最大子数组和的算法。给定一个数组,该算法可以找到一个连续子数组,其元素之和最大,并且能返回这个最大和。在所有列对组合被考虑之后,全局记录的最大值及其对应的子矩阵边界就是我们的答案。给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。对每一个固定的列对(left和right),我们都得到了一个行和数组。分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。分别代表子矩阵左上角的行号和列号,原创 2024-06-28 21:27:54 · 375 阅读 · 0 评论 -
LeetCode.10正则表达式匹配详解
首先,我们定义一个二维的布尔数组dp,其中dp[i][j]表示字符串s的前i个字符和模式p的前j个字符是否可以匹配。这里,“前i个字符” 是指字符串s从开头到第i个字符,同理适用于模式p。原创 2024-06-28 21:18:04 · 473 阅读 · 0 评论 -
LeetCode.438找到字符串中所有字母异位词
基本思想是维护一个窗口,这个窗口可以增大也可以缩小,随着窗口的滑动,我们可以在O(1)的时间内更新窗口内的信息。这种方法的时间复杂度较高,因为它涉及到在每个可能的子串中对每个字符进行查找和删除操作,每次删除操作可能涉及到字符串的重构,其时间复杂度最坏情况下接近O(n * m^2),其中n是字符串。核心思路:因为异位词不关心字符的顺序,只关心字符能不能被匹配上,那就是要判断字符在子串中出现的次数和出现在p的次数是否相同,如果相同就说明子串属于异位词。的子串,返回这些子串的起始索引。不考虑答案输出的顺序。原创 2024-06-27 15:57:41 · 346 阅读 · 0 评论 -
LeetCode.295数据流的中位数详解
在面对数据流时,我们往往需要实时添加元素并频繁查询中位数。使用数组或列表虽然简单,但每次添加元素后要求的排序操作是低效的。是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。这种结构使得我们可以在对数时间内调整堆并找到中位数,非常适合处理大规模数据。返回到目前为止所有元素的中位数。以内的答案将被接受。原创 2024-06-27 14:17:45 · 325 阅读 · 0 评论 -
LeetCode.42接雨水
双指针法之所以有效,是因为无论从左边还是右边开始计算,雨水的接纳量都取决于遇到的“短板”(即较低的柱子)。通过同时从两端向中心遍历,我们可以确保不会遗漏任何可能的接水位置,同时避免了对已经遍历过的位置的重复计算。栈方法依赖于前后元素的比较,动态编程则需要额外的空间来存储每个位置左右两侧的最大高度。使用栈的方法在空间复杂度上是 O(n),时间复杂度也是 O(n)。的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。,从数组的末尾开始向前遍历,每个位置上的。,遍历输入数组,每个位置上的。原创 2024-06-26 15:08:33 · 417 阅读 · 0 评论 -
LeetCode.4寻找两个正序数组的中位数
我们的目标是在不实际合并两个数组的情况下找到中位数。这里的关键是通过适当的分割,使得合并后数组的左半部和右半部元素数量相等或左半部多一个元素。为了实现 O(log (m+n)) 的时间复杂度,我们需要使用二分查找来逻辑上定位两个数组的中位数,而不是实际合并两个数组。我们的目标是通过逻辑上分割这两个数组,找到一个点,使得左边的所有元素都小于右边的元素。理解问题的关键是要意识到,对于一个已排序的数组或两个数组的合并体,中位数将数组分为左右两部分,其中左部分的元素数量等于右部分或多一个。的正序(从小到大)数组。原创 2024-06-25 17:04:13 · 430 阅读 · 0 评论 -
LeetCode.23合并K个升序链表详解
合并多个已排序的链表并返回一个单一的排序链表是数据结构中的一个常见问题,尤其在需要处理多路归并排序时更为常见。本文将详细介绍如何有效地合并 k 个升序链表,每个链表的长度可能不同,但它们本身都是已排序的。我们可以利用这一点,每次从所有链表的当前头节点中取出最小值,以此来构建最终的排序链表。我们的目标是合并这些链表成一个单一的、完全排序的链表。请你将所有链表合并到一个升序链表中,返回合并后的链表。给定 k 个链表,每个链表的头节点存储在数组。给你一个链表数组,每个链表都已经按升序排列。原创 2024-06-25 16:51:42 · 340 阅读 · 0 评论 -
LeetCode.32最长有效括号详解
有效的括号字符串意味着每一个左括号 '(' 都可以找到一个相匹配的右括号 ')'。栈可以帮助我们追踪尚未匹配的括号,并有效地处理嵌套结构。)来分别跟踪左括号和右括号的数量。这种方法的关键在于通过两次遍历字符串来确保所有的括号都能找到对应的匹配,从而计算出最长的有效括号子串。第二次遍历与第一次遍历类似,但方向相反。的字符串,找出最长有效(格式正确且连续)括号子串的长度。第二种方法效率更高,但思路没有上面第一种思路清晰。这个解题思路主要参考了。我们采用两个计数器(原创 2024-06-24 22:07:47 · 418 阅读 · 0 评论 -
LeetCode.51N皇后详解
n 皇后问题是一个经典的回溯算法问题,其目标是在一个 n×n 的棋盘上放置 n 个皇后,使得这些皇后不能相互攻击。当它通过尝试可能的分步解决方案后发现当前解决方案不可能成立(即不能满足问题的约束条件),它会取消上一步甚至是几步的计算,再通过其他的可能的分步解决方案继续尝试。从图论的角度看,n 皇后问题可以被看作是在 n×n 的图中找到一个安全的顶点集合,其中任意两个顶点都不是相互可达的。这种图的特殊构造使其成为图着色问题的一个变种。n 皇后问题是组合数学的一个实例,特别是在它涉及到排列和组合的计算上。原创 2024-06-23 17:01:47 · 270 阅读 · 0 评论 -
LeetCode.25K个一组翻转链表详解
通过这样的步骤,我们可以实现题目要求的每k个节点一组的翻转,而不足k个的部分保持不变。给定一个链表和一个数字 k,任务是将链表中的每 k 个节点做一次翻转,如果链表的长度不是 k 的整数倍,则剩余的节点保持原有顺序。链表的翻转是基础操作,但在此问题中,我们不是翻转整个链表,而是翻转部分连续的节点。完成一个节点组的翻转后,需要将翻转后的尾部(翻转前的头部)连接到下一个节点组的头部。之后,这样原来的第二个节点就成了新的第一个节点,重复这个操作k-1次,便完成了一组的翻转。(当前节点的下一个节点)。原创 2024-06-23 16:51:30 · 920 阅读 · 0 评论 -
LeetCode.41缺失的第一个正数详解
首先,遍历数组,对于每个元素,如果它是一个正整数并且它不在它的理想位置(例如数字 iii 应该位于索引i−1),则将它与其理想位置上的元素交换。最后,遍历数组查找第一个非负数的索引,该索引加 1 即为未出现的最小正整数。通过确保所有的正整数均在数组中有一个对应的索引,我们可以通过索引位置来判断一个数是否存在于数组中。再次遍历数组,第一个其索引+1不等于其值的位置,就指示了未出现的最小正整数。首先,我们需要遍历数组,将所有非正整数以及大于数组长度的数替换为一个大于数组长度的值(例如。请你实现时间复杂度为。原创 2024-06-22 18:15:55 · 468 阅读 · 0 评论 -
LeetCode.239滑动窗口最大值问题详解
直观的解法是对每个窗口使用线性搜索来找到最大值,这种方法的时间复杂度是 O(n*k),其中 n 是数组长度。对于大数组和大窗口尺寸,这将非常低效。为了优化这个过程,我们可以使用双端队列(deque),这是一种允许在两端快速插入和删除的数据结构。:使用双端队列来存储每个窗口的潜在最大值的索引。队列的特点是保持从前到后的元素对应的数组值是递减的。这样,队列的头部总是当前窗口的最大值。代表滑动窗口的大小,该窗口从数组的最左侧滑动到最右侧。个数字,每次窗口向右移动一位。根据题意,我们需要输出每个窗口的最大值,即。原创 2024-06-22 18:02:23 · 297 阅读 · 0 评论