![](https://img-blog.csdnimg.cn/direct/9b5ebe1cee924b8fab8d3a2e3f7fe87b.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
力扣(LeetCode)算法题
文章平均质量分 75
力扣(LeetCode)算法解题思路、方法
千小凡
IT爱好者
展开
-
46. 全排列 - 力扣(LeetCode)
为了生成一个数组的所有可能全排列,我们可以使用回溯法(backtracking)。回溯法是一种通过探索所有可能的候选解来找出所有解的算法。如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会通过在上一步进行一些更改来丢弃该解,即“回溯”并尝试其他可能的解。Java:方法、集合、泛型、Arrays工具类、数组、for循环、if判断。Python: 方法、列表、for循环、if判断。给定一个不含重复数字的数组。原创 2024-05-28 17:07:00 · 585 阅读 · 0 评论 -
43. 字符串相乘 - 力扣(LeetCode)
为了解决这个问题,我们可以模拟手动进行大数乘法的过程。基本思路是将两个字符串从右向左(即最低位到最高位)遍历,逐位相乘,并处理进位。不能使用任何内置的 BigInteger 库或直接将输入转换为整数。Python: 方法、列表、if判断、while循环、for循环。Java:方法、数组、if判断、while循环、for循环。的乘积,它们的乘积也表示为字符串形式。给定两个以字符串形式表示的非负整数。原创 2024-05-27 11:22:22 · 324 阅读 · 0 评论 -
42. 接雨水 - 力扣(LeetCode)
基本思路是,对于数组中的每个位置,我们需要找到其左边和右边最高的柱子。雨水的高度将由这两个最高柱子中的最小值与当前柱子高度的差值决定(如果差值大于0)。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。分别指向数组的开始和结束。同时,我们需要记录到当前位置为止,左边和右边出现的最高柱子的高度。指针中指向较低柱子高度的那个,并计算该位置可以接的雨水量。的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。原创 2024-05-27 10:48:00 · 668 阅读 · 0 评论 -
39. 组合总和 - 力扣(LeetCode)
这个问题是一个典型的回溯算法问题,可以使用深度优先搜索(DFS)来解决。在DFS的过程中,我们需要维护一个当前路径(即当前组合)以及当前的和。位置开始(允许重复选择),对于每个元素,如果加上当前元素的值不超过目标和,则将该元素加入当前组合,并递归调用。在递归调用返回后,需要将当前元素从组合中移除(回溯),以便尝试其他可能的组合。函数中,首先检查当前和是否等于目标和,如果等于,则将当前组合加入结果列表中。如果至少一个数字的被选数量不同,则两种组合是不同的。函数,传入下一个位置作为新的起始位置。原创 2024-05-21 17:04:11 · 623 阅读 · 0 评论 -
38. 外观数列 - 力扣(LeetCode)
(RLE)是一种字符串压缩方法,其工作原理是通过将连续相同字符(重复两次或更多次)替换为字符重复次数(运行长度)和字符的串联。countAndSay(4) = "21" 的行程长度编码 = "1211"countAndSay(3) = "11" 的行程长度编码 = "21"countAndSay(2) = "1" 的行程长度编码 = "11"Python: 方法、for循环、if else语句、字符串拼接。这样,我们就可以通过迭代的方式构建出外观数列,并返回第。因此压缩后字符串变为。原创 2024-05-21 16:53:01 · 1059 阅读 · 0 评论 -
37. 解数独 - 力扣(LeetCode)
这个解题思路是一个典型的回溯算法在数独求解问题上的应用,它非常直观且易于理解。Python: 方法、for循环、if else语句、列表。Java: 方法、for循环、if else语句、数组。编写一个程序,通过填充空格来解决数独问题。数独部分空格内已填入了数字,空白格用。原创 2024-05-20 17:05:03 · 911 阅读 · 0 评论 -
36. 有效的数独 - 力扣(LeetCode)
这个思路的关键在于通过三个检查器(行、列、宫)来跟踪每个数字是否已经出现过,并在遍历过程中不断更新这些检查器。如果在任何时刻发现重复的数字,就立即返回。以外,空格内其他数字均与 示例1 相同。但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无效的。Python: 方法、for循环、if判断、列表、集合。Java:方法、for循环、if判断、数组。,验证已经填入的数字是否有效即可。除了第一行的第一个数字从。,否则在遍历结束后返回。原创 2024-05-14 16:31:50 · 1185 阅读 · 0 评论 -
35. 搜索插入位置 - 力扣(LeetCode)
这个问题是一个典型的二分查找问题,但有一个额外的要求:如果目标值不存在于数组中,需要返回它应该被插入的位置。这意味着我们不仅要找到目标值是否存在于数组中,还要找到它应该被插入的位置,即使它不存在。给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。作为结果,它要么是目标值的索引,要么是目标值应该被插入的位置。,以及在何时知道目标值不存在于数组中,并确定其应该被插入的位置。设置为数组的起始位置(索引0),将右边界。请必须使用时间复杂度为。原创 2024-05-14 16:11:22 · 313 阅读 · 0 评论 -
27. 移除元素 - 力扣(LeetCode)
你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。你不需要考虑数组中超出新长度后面的元素。你不需要考虑数组中超出新长度后面的元素。方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。的元素并返回新数组的长度,我们可以使用双指针的方法。// 根据你的函数返回的长度, 它会打印出数组中。的元素,并返回移除后数组的新长度。原创 2024-05-14 07:39:37 · 871 阅读 · 0 评论 -
23. 合并 K 个升序链表 - 力扣(LeetCode)
对于合并多个已排序的列表或链表,一种常见的算法是使用最小堆(Min Heap)。在这个问题中,我们可以利用Python的。Java:方法、while循环、for循环、PriorityQueue类、if判断。Python: 方法、while循环、for循环、heapq 模块、if判断。请你将所有链表合并到一个升序链表中,返回合并后的链表。给你一个链表数组,每个链表都已经按升序排列。模块不了解的,可以看一下我的这篇文章。将它们合并到一个有序链表中得到。原创 2024-05-14 00:00:06 · 672 阅读 · 1 评论 -
19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)
Python: 方法、while循环、for循环。Java:方法、while循环、for循环。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。原创 2024-05-13 10:50:03 · 436 阅读 · 0 评论 -
25. K 个一组翻转链表 - 力扣(LeetCode)
是一个正整数,它的值小于或等于链表的长度。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。的整数倍,那么请将最后剩余的节点保持原有顺序。个节点一组进行翻转,请你返回修改后的链表。原创 2024-05-13 11:21:49 · 427 阅读 · 0 评论 -
30. 串联所有单词的子串 - 力扣(LeetCode)
它是 words 中以 ["the","foo","bar"] 顺序排列的连接。它是 words 中以 ["foo","bar","the"] 顺序排列的连接。它是 words 中以 ["bar","the","foo"] 顺序排列的连接。它是 words 中以 ["bar","foo"] 顺序排列的连接。子串 "foobar" 开始位置是 9。它是 words 中以 ["foo","bar"] 顺序排列的连接。Java:方法、集合、泛型、逻辑运算符、if else判断、for循环、while循环。原创 2024-05-04 11:04:23 · 962 阅读 · 0 评论 -
21. 合并两个有序链表 - 力扣(LeetCode)
这个思路的关键在于利用两个指针来同时遍历两个链表,通过比较节点值来决定哪个节点应该被添加到新链表中。同时,通过哑节点来简化链表的头节点操作。来遍历两个链表,并通过比较它们的值来决定哪个节点应该被添加到新链表中。最后,如果其中一个链表还有剩余节点,我们直接将它们连接到新链表的末尾。最后,我们返回哑节点的下一个节点,它实际上是新链表的头节点。新链表是通过拼接给定的两个链表的所有节点组成的。,并将它们合并为一个新的链表,然后打印出合并后的链表的值。在示例代码中,我们创建了两个示例链表。类来表示链表节点,并在。原创 2024-05-04 09:47:06 · 927 阅读 · 0 评论 -
18. 四数之和 - 力扣(LeetCode)
Java:方法、集合、泛型、if else语句、while循环、for循环、逻辑运算符、自增自减运算符、数组、Arrays.sort()、Arrays.asList():在遍历过程中,我们需要跳过重复的数字以避免产生重复的组合。的下一个位置开始遍历。由于数组已经排序,我们可以通过比较当前的和与目标值来跳过一些不必要的搜索。与固定前两个数类似,我们需要跳过重复的数字以避免重复的组合。排序有助于我们跳过重复的数字,并优化搜索过程。:最后,我们返回所有满足条件的四元组列表。:在固定前两个数之后,我们使用指针。原创 2024-05-03 23:13:32 · 344 阅读 · 2 评论 -
14. 最长公共前缀 - 力扣(LeetCode)
为数组中的第一个字符串,并从第二个字符串开始遍历数组。对于每个字符串,我们都将其与当前的。Python: 方法、列表、逻辑运算符、for else语句、if判断、字符串。在上面的代码中,我们首先处理了边界情况,包括空数组和空字符串。在遍历过程中变为空字符串,则说明不存在公共前缀,直接返回空字符串。Java:方法、数组、逻辑运算符、for循环、if判断、字符串。编写一个函数来查找字符串数组中的最长公共前缀。进行比较,并在遇到不匹配的字符时截断。如果不存在公共前缀,返回空字符串。输入不存在公共前缀。原创 2024-05-03 11:43:22 · 366 阅读 · 1 评论 -
11. 盛最多水的容器 - 力扣(LeetCode)
图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。最后,它返回计算得到的最大容器水量。Java: 方法、Math.max()、while循环、数组、if else语句、算术运算符、自增自减运算符。为了找到能够容纳最多水的两条线,我们可以使用双指针的方法。双指针分别从数组的两端开始,向中间移动。在每次迭代中,它都计算当前指针所指向的两条线形成的容器的面积,并更新。轴共同构成的容器可以容纳最多的水。指针从数组的开始处开始,原创 2024-05-03 11:25:27 · 401 阅读 · 2 评论 -
2. 两数相加 - 力扣(LeetCode)
在上面的代码中,我们使用了一个哑节点(dummy)来简化链表的创建过程,因为我们不需要在循环开始前就知道链表的长度。哑节点是一个特殊的节点,它不包含任何数据(或包含默认值,如0),但它的下一个节点是结果链表的第一个实际节点。在循环结束后,我们返回哑节点的下一个节点作为结果链表的头节点。想象一下,你有两个逆序的纸条,每个纸条上都写着一串数字,这些数字代表一个非负的整数,但是是从低位到高位排列的(也就是个位数在最前面,十位数在后面,依此类推)。方法来得到相加后的结果链表,最后打印了结果链表的内容。原创 2024-05-02 11:37:52 · 720 阅读 · 2 评论 -
1. 两数之和 - 力扣(LeetCode)
Java:方法、map集合、泛型、for循环、if语句、数组、Arrays.toString()工具类方法、算术计数符。Python: 方法、for循环(enumerate()方法)、字典、if in语句、for循环、列表、你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。整数,并返回它们的数组下标。你可以想出一个时间复杂度小于。你可以按任意顺序返回答案。,请你在该数组中找出。原创 2024-05-02 10:15:28 · 243 阅读 · 3 评论 -
15. 三数之和 - 力扣(LeetCode)
Java:方法、数组、集合、泛型、if else语句、while循环、Arrays.sort()、Arrays.asList()、逻辑运算符、自增自减运算符。找到后,它使用两个内部循环来跳过所有重复的元素,以避免在结果中包含重复的三元组。最后,它返回找到的所有三元组的列表。为了找到所有和为0且不重复的三元组,我们可以首先对数组进行排序,然后使用三个指针(i, j, k)在排序后的数组上进行遍历。作为输入,并返回所有和为0的不重复三元组的列表。注意,输出的顺序和三元组的顺序并不重要。,判断是否存在三元组。原创 2024-04-30 17:23:19 · 237 阅读 · 0 评论 -
7. 整数反转 - 力扣(LeetCode)
在这个解决方案中,我们首先确定整数的符号(正或负),然后将其绝对值用于反转操作。我们逐个处理整数的每一位数字,从最低位开始,并将其添加到。是一个负数的最小值(即-2^31),我们不能直接将其乘以10并加上一个数字来检查溢出,因为这会直接导致溢出。最后,我们将反转后的数字乘以原始符号,并返回结果。由于整数反转后符号不变,因此在处理负数时,我们还需要检查反转后的数字是否会小于。)进行比较,因为我们是在处理 32 位有符号整数,其中最高位是符号位。如果反转后整数超过 32 位的有符号整数的范围。原创 2024-04-30 16:29:44 · 407 阅读 · 0 评论 -
5. 最长回文子串 - 动态规划(dp)- 力扣(LeetCode)
对于每个子字符串,它检查首尾字符是否相等,并且去掉首尾字符的子字符串(如果存在)是否也是回文的。如果是,那么当前子字符串就是回文的,并且更新。值得注意的是,上述代码返回的是最长回文子串的其中一个解,因为可能存在多个最长回文子串。来存储回文子串的信息,然后通过两层循环遍历所有可能的子串,判断它们是否是回文的,并更新最长回文子串的起始和结束索引。同时,它还检查当前回文子串的长度是否大于之前找到的最长回文子串的长度,并更新最长回文子串的起始和结束索引。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。原创 2024-04-29 11:32:18 · 246 阅读 · 1 评论 -
3. 无重复字符的最长子串-力扣(LeetCode)
这段Python代码实现了寻找给定字符串中最长无重复字符子串的长度。它使用滑动窗口的方法,通过左右两个指针来定义窗口范围,并利用集合快速判断字符是否重复。当遇到重复字符时,移动左指针收缩窗口,直到重复字符不再出现。最终,返回遍历过程中记录的最长无重复字符子串的长度。方法中,使用了双指针技巧来维护一个滑动窗口,窗口内的字符都是不重复的。通过不断移动右指针来扩展窗口,当遇到重复字符时,就移动左指针来缩小窗口,直到重复字符不再出现。,用于计算一个字符串中不含重复字符的最长子串的长度。因为无重复字符的最长子串是。原创 2024-04-22 11:27:06 · 319 阅读 · 1 评论