自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 45 找到字符串中所有字母异位词

滑动窗口+字符串计数countPpcountSp.size()scountP遍历字符串 s 一次,窗口中的字符频率更新需要O1。总时间复杂度为On,其中 n 是字符串 s 的长度。使用了两个固定大小的数组countP和countS(长度 26),所以空间复杂度为O1。

2024-12-16 10:19:00 526

原创 44 无重复字符的最长字串

44 无重复字符的最长字串44.1 无重复字符的最长字串解决方案解决思路:核心思想:滑动窗口,使用滑动窗口的方法来维护当前无重复字符的字串,遍历字符串的过程中动态调整窗口的左右边界。滑动窗口:定义窗口的左右边界left和right。当right向右移动时,记录字符是否重复。如果出现重复字符,移动left,直到窗口中不再有重复字符。借助哈希表记录字符索引:使用一个哈希表记录当前窗口中字符的最新索引。当遇到重复字符时,更新左边界到重复字符的下一位。更新结果:每次调整窗口厚

2024-12-15 16:18:25 332

原创 43 搜索二维矩阵

解决思路:43.2 举例说明输入:

2024-12-13 10:05:26 878

原创 42 旋转图像

On2OnOn2O1。

2024-12-11 10:15:21 666

原创 41 螺旋矩阵

上 = 0左 = 0。

2024-12-10 10:00:01 401

原创 40 腐烂的橘子

解题思路:代码解释:时间复杂度和空间复杂度:假设以下输入矩阵:2 表示腐烂的橙子1 表示新鲜的橙子0 表示空地初始状态:

2024-12-09 10:07:02 966

原创 39 矩阵置零

解题思路:代码解释:时间复杂度和空间复杂度:假设有以下矩阵:初始化标记:rowZero = false (假设第一行不需要置零)colZero = false (假设第一行不需要置零)检查第一行和第一列是否包含零使用第一行和第一列标记需要置零的行和列矩阵如下:遍历:值是0,因此我们将和都置为,表示第二行和第二列需要置零。此时矩阵变为:遍历 (1,2):值是 6,不需要做任何操作。遍历 (2,1):值是 7,不需要做任何操作。遍历 (2,2):值是 8,不需要做任何操作。矩阵变为

2024-12-08 11:46:40 927

原创 38 岛屿数量

解题思路:解释:时间复杂度:假设有如下的网格(‘1’ 表示陆地,‘0’ 表示水):遍历网络:从网络的左上角开始,逐个检查每个位置。如果当前位置是,说明我们找到一个岛屿的一部分。接着,我们用深度优先搜索(DFS)来标记与之前相连的所有。找到第一个岛屿:初始时,我们遍历到,它是,所以我们发现了一个岛屿的一部分。此时,我们将岛屿计数器加1,变为1。然后,启动DFS,从开始,标记所有相连的,把他们变成,表示已经访问过。DFS会从四个方向(上、下、左、右)扩展。从开始,我们将其改为,然后继续检查:

2024-12-07 11:25:16 1035

原创 37 二叉树的最近公共祖先

使用来解决问题。:在递归中,根节点为NULL或匹配到p或q时返回当前节点。:通过反别递归左右子树,合并结果来找到最低公共祖先。

2024-12-06 09:55:55 333

原创 36 排序链表

【代码】36 排序链表。

2024-12-05 10:04:40 873

原创 35 随机链表的复制

ON。

2024-12-04 09:36:16 887

原创 34 路径总和3

这个函数从当前节点开始,递归地检查所有从该节点开始的路径,看看路径和是否等于 remainingSum(即剩余的目标和)。:这个函数从每个节点开始,递归地调用dfs检查从该节点出发的所有路径和是否为目标值。并且递归地调用左右子树的。我们需要找出所有路径和为8的路径。路径可以从任何一个节点开始,且必须是连续的(不能跳跃)。假设目标和targetSum = 8,从根节点开始。

2024-12-03 09:26:18 828

原创 33 搜索插入位置

33 搜索插入位置33.1 搜索插入位置解决方案class Solution {public: int searchInsert(vector<int>& nums, int target) { int left = 0,right = nums.size() -1; // 执行二分查找 while(left <= right){ int mid = left+ (right - left)

2024-12-02 09:20:37 249

原创 32 从前序与中序遍历序列构造二叉树

首先访问根节点,然后访问左子树,再访问右子树。:首先访问左子树,然后访问根节点,最后访问右子树。OnOn2O1On。

2024-12-01 10:31:26 853

原创 31 二叉树转换成链表

last。

2024-11-28 10:17:35 265

原创 30 二叉树的右视图

需要返回二叉树的右视图,即从右侧看到的每层最右侧的节点。从根节点遍历(BFS),但是必须确保返回的是每层最右侧的节点。

2024-11-27 10:02:59 701

原创 29 二叉搜索树中第K小的元素

代码核心思想:二叉搜索树 (BST) 的中序遍历是递增顺序的节点值序列,因此第 k 小的元素可以通过中序遍历找到。当我们遍历到第 k 个节点时,它即是答案。二叉搜索树 (BST) 的特性代码解释:示例输入:对应的树结构为:步骤解析:输出结果:3总结:

2024-11-26 10:31:58 844

原创 28 验证二叉树

输入:root = [5,1,4,null,null,3,6]:验证这颗树是否有一颗有效的二叉搜索树(bst).

2024-11-25 09:57:30 391

原创 27 二叉树的层序遍历

【代码】27 二叉树的层序遍历。

2024-11-23 12:25:59 289

原创 26 两两交换链表中的节点

OnO1。

2024-11-22 11:06:09 847

原创 25 删除链表的倒数第N个节点

代码解析:fastslowOLO1。

2024-11-21 10:50:03 964

原创 24 两数相加

哑节点的使用逐位相加创建新节点并拼接链表指针移动处理剩余进位OmaxMN))MNOmaxMN))

2024-11-20 10:26:28 995

原创 23 环形链表2

23.2 举例说明假设链表如下:链表节点值为 [3, 2, 0, -4]。环的起点是值为 2 的节点(第 2 个节点,pos = 1)。运行过程:快慢指针移动:让快指针移动两步,慢指针移动一步。第一步:第二步:第三步:第四步:快慢指针在值为 2 的节点相遇,说明链表中有环。确定环的起点:相遇后,重新调整慢指针 slow 的位置,将其移回链表头(值为 3),而快指针 fast 留在相遇点(值为 2)。同时移动快慢指针第二步:此时,快慢指针再次相遇

2024-11-19 10:30:47 398

原创 22 缺失的第一个正数

解题思路:实现步骤:具体过程:条件 确保只考虑 1 到 n 范围内的正整数,忽略负数和超出范围的数。将 放到正确的位置。第二步:找到第一个不匹配的位置如果某个位置 i 满足 nums[i] != i + 1,说明 i + 1 是缺失的最小正整数。第三步:返回结果如果所有位置都满足 ,则说明数组中包含所有 的正整数,因此返回 。22.2 举例说明将每个正整数放到“正确的位置”初始状态将值为 k 的元素放到下标 k-1 的位置上。交换的条件是:nums[i]

2024-11-18 09:44:47 813

原创 21 除自身之外数组的乘积

OnO1。

2024-11-17 11:21:28 613

原创 20 轮转数组

OnO1。

2024-11-16 10:34:58 337

原创 19 接雨水

这个算法使用了两个指针和动态更新左右两侧的最大高度,用来高效地计算可以接住的水量。这种双指针方法的优点是时间复杂度为 (O(n)),并且只需要常量级的额外空间,非常适合这种问题。

2024-11-15 09:40:38 659

原创 18 三数之和

代码解释:复杂度分析:使用示例首先,我们对数组进行排序,得到。排序的目的是为了方便后续的双指针操作,并且可以帮助我们避免重复的三元组。遍历数组并固定第一个元素我们使用循环来遍历数组,每次固定一个元素作为三元组中的第一个元素,然后在其右侧寻找另外两个元素,使得这三个数的和为0。第一步:第二步:第三步:第四步:第二次循环()第一步:第二步:第三次循环()第四次循环()第一步:最终,我们找到的所有满足条件的三元组为。代码执行过程小结这个方法高效地解决了“三数之和”问题,通过排序和双指针优化避免了重复计算和重复三

2024-11-14 09:54:07 1014

原创 17 盛最多水的容器

因为这样做有可能找到一个更大的面积。而移动较长的一边不会增加面积,因为新的宽度会减少,而高度不会增加。最终,我们得到了最大面积 49,这也是在给定数组中容积最大的容器。通过这个例子我们看到,双指针法的核心是。

2024-11-13 09:55:12 413

原创 16 合并区间

【代码】16 合并区间。

2024-11-12 09:58:04 802

原创 15 哈希表的基本原理及使用

哈希表(Hash Table)是一种通过“”来存储数据的数据结构。它背后的核心思想是利用“”将键映射到一个特定的位置,从而实现快速存储和查找。

2024-11-11 09:59:25 449

原创 14 最长连续序列

O1这个算法的时间复杂度是 O(n),因为每个数字最多只会被处理一次,符合题目要求的时间复杂度。

2024-11-11 09:54:38 637

原创 13 字母异位词分组

将字母异位词按照字母排序后得到一个唯一的“标准形式”,并将所有拥有相同“标准形式”的单词分到同一个组中。:该算法的时间复杂度为ON×KlogK,其中 N 是单词数量,K 是单词的平均长度。:额外的空间复杂度取决于输入数据,因为 anagramMap 和 result 都需要额外的存储空间。

2024-11-10 11:53:41 746

原创 12 最大子数组和

假设输入数组是 nums = [-2,1,-3,4,-1,2,1,-5,4]。遍历完数组后,max_sum 为 6,即最大子数组和为 6。

2024-11-09 11:04:01 845

原创 11 将有序数组转换为二叉搜索树

代码解释:helper 函数:复杂度分析:数组 nums = [-10, -3, 0, 5, 9] 来详细解释这个算法的运行过程。运行过程:nums = [-10, -3, 0, 5, 9]数组长度为 5,所以 mid = 2(即索引 2 的位置)。中间元素为 0,我们创建根节点 TreeNode(0)。现在 0 是整棵树的根节点,接下来我们要分别处理 0 左边和右边的元素来构建左子树和右子树。子数组 [-10, -3](即索引 0 到 1)。数组长度为 2,mid = 0 + (

2024-11-08 09:26:33 856

原创 10 二叉树的直径

代码解释:假设我们有以下二叉树:解题思路:过程解析:最终结果:最大直径为 3,对应的路径是从节点 4 -> 2 -> 1 -> 3 或 5 -> 2 -> 1 -> 3,都有 3 条边。总结:

2024-11-07 10:03:10 943

原创 09 对称二叉树

isMirror。

2024-11-06 09:44:18 676

原创 08 反转二叉树

组合所有翻转后的结果,根节点 (4) 下现在连接了翻转后的子树 (7) 和 (2)。我们使用递归方法来翻转每个节点的左右子树。

2024-11-05 20:24:00 230

原创 07 二叉树的最大深度

代码说明:假设我们有下面这棵二叉树:创建二叉树:首先,我们创建这棵树的节点,并按照结构相互连接:计算最大深度:开始于根节点(值为3):计算左子树(值为9)的深度:计算右子树(值为20)的深度:合并结果并计算根节点的深度:

2024-11-05 19:53:35 379

原创 06 二叉树中序遍历

【代码】06 二叉树中序遍历。

2024-11-02 11:28:34 788

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除