Leetcode
文章平均质量分 65
Wils0nEdwards
这个作者很懒,什么都没留下…
展开
-
Leetcode 删除链表倒数第 N 个节点
我们使用两个指针,fast和slow,最初都指向虚拟头节点dummy。快指针fast会比慢指针slow超前移动n+1步。这样,当fast指向链表末尾(null)时,slow刚好指向要删除节点的前一个节点。通过快慢指针法,仅需遍历链表一次(一次循环)就可以找到倒数第N个节点,并将其删除,时间复杂度为O(L),其中L是链表的长度。空间复杂度为O(1),因为只用了常数级别的额外空间。原创 2024-10-09 11:37:46 · 92 阅读 · 0 评论 -
Leetcode 下一个排列
首先理解整数的字典序,字典序排列总是优先让“较小的”元素出现在前面。字典序的排列规则类似于字典中的单词排列方式,从左到右逐位比较,较小的数字优先出现。按照正整数元素排列的字典序,如果将每个排列视为一个整数值,那么这些排列确实是以升序排列的。如果只有一个元素,下一个排列是其本身。原创 2024-10-09 11:09:08 · 122 阅读 · 0 评论 -
Leetcode 打家劫舍
设dp[i]表示前i个房屋能偷取的最大金额。不偷当前房屋 i:那么最大金额是dp[i-1],即上一个房屋的最大偷取金额。偷当前房屋 i:那么最大金额是,即偷取当前房屋 i,加上不相邻的房屋(即房屋i-2)的最大金额。其中dp[i-1]是不偷当前房屋,是偷当前房屋。原创 2024-10-08 10:36:00 · 302 阅读 · 0 评论 -
Leetcode 搜索插入位置
这段代码的核心思想是 二分查找,用于在一个已经排序的数组中查找目标值的位置。如果目标值存在于数组中,返回它的索引;如果目标值不存在,返回它按顺序应该插入的位置。定义左右边界:二分查找循环:这里的 计算方式是为了避免直接 可能出现的整数溢出问题。比较中间值:最终插入位置:这个算法高效且适用于有序数组的搜索和插入位置查找问题。原创 2024-10-08 10:01:25 · 317 阅读 · 0 评论 -
Leetcode 环形链表
表示链表长度是奇数,fast指针走到了链表的最后一个节点。:表示链表长度是偶数,fast指针走到了倒数第二个节点,再往前走就越界了。因此,这段判断逻辑是为了及时检测链表是否结束,以及避免空指针访问错误。如果链表没有环,fast会在遍历过程中变为null或其next变为null,此时直接返回false,表明链表中没有环。原创 2024-09-25 20:18:38 · 428 阅读 · 0 评论 -
Leetcode 反转链表
【代码】Leetcode 反转链表。原创 2024-09-24 17:10:29 · 348 阅读 · 0 评论 -
Leetcode 相交链表
【代码】Leetcode 相交链表。原创 2024-09-24 16:42:20 · 328 阅读 · 0 评论 -
Leetcode 螺旋矩阵
和 if (left <= right)的作用是确保遍历时矩阵的边界没有交叉,从而避免重复访问或越界访问。它们是为了保证代码在任意大小和形状的矩阵上都能正确运行,特别是在螺旋遍历的过程中边界不断收缩的情况下。原创 2024-09-24 16:24:36 · 781 阅读 · 0 评论 -
Leetcode 除自身以外数组的乘积
【代码】Leetcode 除自身以外数组的乘积。原创 2024-09-23 19:00:47 · 199 阅读 · 1 评论 -
Leetcode 合并区间
我们借助一个辅助链表(元素类型是一维数组)来进行结果统计。这个算法解决了“合并区间”的问题,具体要求是给定一组区间(每个区间有开始和结束位置),如果两个区间有重叠,那么需要将它们合并成一个区间,并返回所有不重叠的区间。原创 2024-09-23 17:13:59 · 364 阅读 · 0 评论 -
Leetcode 最小覆盖子串
处理右边界时先更新count是为了确保在当前字符进入窗口时,能够及时检查它是否满足匹配需求。只有在count减少之后,才能表明该字符被正确匹配。后更新HashMap是为了保证窗口的状态准确地反映已经包含的字符频率。处理左边界时先更新HashMap是为了表示当前字符即将从窗口中移除。只有更新了字符的频率之后,才能判断窗口是否还满足条件。后更新count是因为我们需要在频率变化之后才能判断该字符是否已经不足。如果移出字符后,窗口中还需要再次匹配该字符,那么count才会增加。右边界的顺序。原创 2024-09-23 16:10:18 · 825 阅读 · 0 评论 -
Leetcode 和为 K 的子数组
可以用(Prefix Sum)和(HashMap)来设计算法。原创 2024-09-20 21:16:31 · 883 阅读 · 0 评论 -
Leetcode 找到字符串中所有字母异位词
这两行代码的巧妙之处在于将字符直接映射到数组下标,从而可以用数组来记录字符出现的频率,并通过简单的数组比较来判断异位词,从而使得算法简洁、高效。的作用是从当前窗口的最右端i推导出该窗口的左端起始位置,并将这个起始位置存入结果中。这是因为i对应的是当前滑动窗口的最右边界,而我们需要的是这个窗口的最左边界(即异位词的起始位置)。原创 2024-09-16 19:31:59 · 1183 阅读 · 0 评论 -
Leetcode 爬楼梯
【代码】Leetcode 爬楼梯。原创 2024-09-15 15:30:50 · 124 阅读 · 0 评论 -
Leetcode 验证回文串
尽管外层的控制了总体循环,但内部的while循环在跳过无效字符时,左右指针可能会过多地移动,因此需要在内部的循环中再次检查,以防止指针越界或交错的情况发生。这是确保算法正确性和防止潜在错误的关键步骤。原创 2024-09-15 15:29:37 · 937 阅读 · 0 评论 -
Leetcode 旋转图像
通过这两个步骤,矩阵就会顺时针旋转90度。原创 2024-09-14 10:13:16 · 446 阅读 · 0 评论 -
Leetcode 缺失的第一个正整数
题目意思是找出第一个没出现的最小正整数。原创 2024-09-14 09:59:48 · 568 阅读 · 0 评论 -
Leetcode 寻找重复数
可以使用来解决这道题目。使用位运算的一个核心思想是基于数字的二进制表示,统计每一位上 1 的出现次数,并与期望的出现次数做比较。通过这种方法,可以推断出哪个数字重复。原创 2024-09-13 11:14:23 · 507 阅读 · 0 评论 -
Leetcode 二叉树中根遍历
第一个构造函数是无参的,它默认创建一个值为 0 的节点,没有子节点。第二个构造函数允许创建一个带有值的节点,但没有子节点。第三个构造函数允许创建一个带有值的节点,并且可以指定其左右子节点。原创 2024-09-13 10:33:30 · 443 阅读 · 0 评论 -
Leetcode 字母异位词分组
首先将每个字符串进行排序,将排序之后的字符串作为 key,然后将用 key 所对应的异位词组 作为value。然后我们使用 std::pair 来遍历 键值对,将异位词分组保存。这道题目的意思就是:把包含字母字符相同的单词分到同一组。原创 2024-09-12 10:36:21 · 388 阅读 · 0 评论 -
Leetcode 移动零
要求将数组中的所有0移动到数组的末尾,同时保持非零元素的相对顺序。原创 2024-09-11 09:13:19 · 325 阅读 · 0 评论 -
Leetcode 最大子数组和
Kadane’s Algorithm用一种局部最优解逐步构建出全局最优解。通过在每个位置上选择是继续累加还是重新开始子数组,你能够高效地找到整个数组的最大子数组和。每次你只关心当前元素,以及前面累加的结果,这使得算法可以在**O(n)**的时间内完成问题的求解。public://首先利用第1个元素分别初始化局部最优解和全局最优解++i) {//首先更新当前局部最优解, 对当前元素,无非2种选择:1.作为新的子数组起点,2.作为当前子数组的末尾。原创 2024-09-10 10:47:17 · 1282 阅读 · 0 评论 -
Leetcode 最长连续序列
存在于哈希集中,那么说明当前元素必然不可能是某个最长连续序列的开始元素。通过哈希集合的使用,算法避免了排序操作(O(n log n)),从而保证了线性时间复杂度 O(n)。每当跳出循环时,意味着最近一次处理的连续序列的长度已经统计结束,需要和上一次处理的连续序列的长度(再回到如果当前元素的确是某个可能的最长连续序列的第一个元素时,我们利用 STL 容器的成员函数。来判断当前元素的右邻元素是否存在于哈希集中,并使用一个新的变量(所以,如果当前元素的前一个相邻元素(如果右邻元素存在于哈希集,那么。原创 2024-09-10 10:11:54 · 522 阅读 · 0 评论 -
Leetcode 矩阵置零
这是Leetcode第73题“矩阵置零”。题目要求,如果矩阵中某个元素为0,则将该元素所在的行和列中的所有元素置为0。我们需要在原地完成这个操作。原创 2024-09-09 12:02:26 · 458 阅读 · 0 评论 -
Leetcode 只出现一次的元素
交换律和结合律使我们能够无视数组中数字的顺序和排列。相同的数字异或为 0,因此成对的数字会在异或操作中互相抵消。最终,所有成对出现的数字都变成了0,只出现一次的数字留下来,它与0异或后结果就是该数字本身。因此,不管数组中那些成对的数字如何排列,最终只出现一次的那个数字会被正确地找到。这也是为什么这种算法在处理这个问题时如此高效且简单。在异或操作中,一个数字与另一个数字进行两次异或会恢复原始数字。这是异或操作的一个重要性质,也是这个算法正确性的关键。数字与自身异或两次会恢复原始值。原创 2024-09-09 11:14:48 · 713 阅读 · 0 评论 -
Leetcode 无重复字符的最长子串
哈希表只存储每个字符最近一次出现的位置,是为了在滑动窗口中快速查找字符的最近出现情况,从而在 O(1) 的时间内决定是否需要更新窗口的起点。这样可以确保算法的时间复杂度为 O(n),在处理大规模输入时仍能高效运行。// 存储字符和其索引// 无重复字符子串的最大长度// 滑动窗口的起始位置++end) {// 如果当前字符已经在滑动窗口中,更新起始位置到其下一个位置// 更新当前字符的索引// 更新最大长度string s;cout << "请输入一个字符串: ";原创 2024-09-09 10:07:17 · 887 阅读 · 0 评论 -
Leetcode 两数之和
哈希函数的设计:不良的哈希函数会导致较多的冲突,从而使查找和插入的时间复杂度退化为 O(n)。冲突的处理策略:冲突解决的方式(如链地址法或开放地址法)决定了在发生冲突时的额外开销。负载因子:过高的负载因子会增加冲突的几率,因此需要动态扩展哈希表来保持性能。一个均匀分布、计算高效的哈希函数能够显著减少冲突,保持哈希表在大多数情况下的 O(1) 性能。需要用到的头文件public://初始化一个hash table存储元素值和下标i++) {//求当前元素的补数。原创 2024-09-08 20:02:08 · 1337 阅读 · 0 评论 -
Leetcode刷题笔记:全排列
它将当前元素与后面的每个元素进行交换,生成新的排列,并在递归返回时恢复交换前的顺序(回溯)原创 2024-09-05 21:11:34 · 294 阅读 · 0 评论