LeetCode
Think@
Science flies me to the moon.
展开
-
(LeetCode C++)二叉树展开为链表
链接:https://leetcode.cn/problems/flatten-binary-tree-to-linked-list。展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null。展开后的单链表应该与二叉树 先序遍历 顺序相同。来源:力扣(LeetCode)原创 2022-10-11 21:17:34 · 281 阅读 · 0 评论 -
(LeetCode C++)从前序与中序遍历序列构造二叉树
链接:https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal。给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。因此按照以上的规则进行递归即可。来源:力扣(LeetCode)原创 2022-10-04 20:18:20 · 629 阅读 · 0 评论 -
(LeetCode C++)二叉树的层序遍历
链接:https://leetcode.cn/problems/binary-tree-level-order-traversal。利用队列先进先出的性质,对给定的二叉树进行层序遍历。(即逐层地,从左到右访问所有节点)。来源:力扣(LeetCode)原创 2022-09-30 20:58:41 · 607 阅读 · 0 评论 -
(LeetCode C++)验证二叉搜索树
链接:https://leetcode.cn/problems/validate-binary-search-tree。给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。使用数值标识符需要提前调用< limits >头文件。因此,使用C++中的数值标识符来表示最大值和最小值。使用中序遍历递归的方法验证二叉搜索树。使用栈进行中序遍历来验证二叉搜索树。来源:力扣(LeetCode)使用递归的方法验证二叉搜索树。原创 2022-09-28 19:42:18 · 631 阅读 · 0 评论 -
(LeetCode C++)不同的二叉搜索树
链接:https://leetcode.cn/problems/unique-binary-search-trees。利用二叉搜索树的左右子树也分别为二叉搜索树的性质,分别令每个点为根节点,依次遍历。二叉搜索树:Binary Search Tree。返回满足题意的二叉搜索树的种数。来源:力扣(LeetCode)个节点组成且节点值从。原创 2022-09-27 20:15:25 · 898 阅读 · 1 评论 -
(LeetCode C++)单词搜索
给定一个 m x n 二维字符网格 board 和一个字符串单词 word。如果 word 存在于网格中,返回 true;否则,返回 false。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。找到二维字符网格中与目标字符串首字符相同的位置开始遍历,不断的往上下左右尝试寻找下一个字符。链接:https://leetcode.cn/problems/word-search。来源:力扣(LeetCode)原创 2022-09-26 22:04:19 · 182 阅读 · 0 评论 -
(LeetCode C++)子集
给你一个整数数组 nums ,数组中的元素 互不相同。返回该数组所有可能的子集(幂集)。链接:https://leetcode.cn/problems/subsets。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。来源:力扣(LeetCode)使用回溯法收集所有的子集。原创 2022-09-25 21:22:36 · 374 阅读 · 0 评论 -
(LeetCode C++)颜色分类
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。使用两个指针,分别指向红白交界和蓝白交界,然后依次遍历给定数组,将对应的数字交换即可。链接:https://leetcode.cn/problems/sort-colors。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库的sort函数的情况下解决这个问题。来源:力扣(LeetCode)原创 2022-09-25 15:48:40 · 298 阅读 · 0 评论 -
(LeetCode C++)最小路径和
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。链接:https://leetcode.cn/problems/minimum-path-sum。根据题目,移动方式只有:往右、往下两种。说明:每次只能向下或者向右移动一步。来源:力扣(LeetCode)原创 2022-09-23 19:39:40 · 204 阅读 · 0 评论 -
(LeetCode C++)不同路径
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。链接:https://leetcode.cn/problems/unique-paths。但是需要注意:当移动到最右边或最下边时,则仅有向下或向右两种移动方式。根据题目,移动方式只有:往右、往下两种。来源:力扣(LeetCode)问总共有多少条不同的路径?基于递归来寻找不同路径。原创 2022-09-22 21:11:29 · 211 阅读 · 0 评论 -
(LeetCode C++)合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。链接:https://leetcode.cn/problems/merge-intervals。首先判断下一个区间的左端点是否小于等于当前区间的右端点。来源:力扣(LeetCode)原创 2022-09-22 15:39:18 · 464 阅读 · 0 评论 -
(LeetCode C++)跳跃游戏
链接:https://leetcode.cn/problems/jump-game。给定一个非负整数数组 nums ,你最初位于数组的 第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。从前向后遍历,每次记录可以到达的最远位置(贪心)判断你是否能够到达最后一个下标。来源:力扣(LeetCode)原创 2022-09-21 21:30:11 · 631 阅读 · 0 评论 -
(LeetCode C++)字母异位词分组
链接:https://leetcode.cn/problems/group-anagrams。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。其次,将排序前后的字符分别作为Key和Value存入哈希表。首先,将所有字符串排序,而异位词经过排序后拥有相同的顺序。最后,遍历哈希表,将所有的Value保存到结果数组中。来源:力扣(LeetCode)原创 2022-09-19 17:26:29 · 428 阅读 · 0 评论 -
(LeetCode C++)旋转图像
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。链接:https://leetcode.cn/problems/rotate-image。第一步:上下翻转,由于直接交换数值,因此仅需反转数组长度的一半,即可反转全部矩阵。第二步:沿主对角线反转得到结果矩阵。来源:力扣(LeetCode)原创 2022-09-18 22:09:00 · 705 阅读 · 0 评论 -
(LeetCode C++)全排列
由于排列问题会使用到所有的元素,因此需要设置一个use_flag数组来记录元素是否被使用过,在遍历时,需要跳过已经使用的元素。使用回溯法来遍历不同的排列,回溯的终止条件是:缓存temp的大小等于nums的大小,说明搜索到了叶节点,保存结果后返回。链接:https://leetcode.cn/problems/permutations。来源:力扣(LeetCode)给定一个不含重复数字的数组。原创 2022-09-18 16:59:33 · 536 阅读 · 0 评论 -
(LeetCode C++)组合总和
给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。如果至少一个数字的被选数量不同,则两种组合是不同的。链接:https://leetcode.cn/problems/combination-sum。对于给定的输入,保证和为 target 的不同组合数少于 150 个。来源:力扣(LeetCode)使用回溯算法向下进行遍历查找。原创 2022-09-17 23:33:22 · 237 阅读 · 0 评论 -
(LeetCode C++)在排序数组中查找元素的第一个和最后一个位置
链接:https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array。给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。面对非递减顺序排列的有序数组,使用二分法解决这些问题,依次查找元素的左右边界。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。如果数组中不存在目标值 target,返回 [-1, -1]。原创 2022-09-15 15:53:36 · 742 阅读 · 0 评论 -
(LeetCode C++)搜索旋转排序数组
在传递给函数之前,nums 在预先未知的某个下标 k(0原创 2022-09-12 20:19:25 · 246 阅读 · 0 评论 -
(LeetCode C++)下一个排列
整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的 下一个排列 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。链接:https://leetcode.cn/problems/next-permutation。就是将其所有成员以序列或线性顺序排列。修改,只允许使用额外常数空间。来源:力扣(LeetCode)原创 2022-09-11 21:10:06 · 132 阅读 · 0 评论 -
(LeetCode C++)括号生成
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且。我们可以利用以上两个性质,使用深度优先搜索进行遍历。1.左右括号数量相等(即为题干中提到的:有效的)2.任意前缀中:左括号的数量>=右括号的数量。原创 2022-09-10 22:43:30 · 564 阅读 · 0 评论 -
(LeetCode C++)删除链表的倒数第N个节点
链接:https://leetcode.cn/problems/remove-nth-node-from-end-of-list。首先遍历单链表一遍,获取单链表的长度。然后通过一个指针去掉要删除的节点。利用栈先进后出的性质实现对单链表节点的删除操作。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。来源:力扣(LeetCode)利用双指针协作进行删除。原创 2022-09-10 00:08:22 · 633 阅读 · 0 评论 -
(LeetCode C++) 电话号码的字母组合
链接:https://leetcode.cn/problems/letter-combinations-of-a-phone-number。给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。来源:力扣(LeetCode)原创 2022-09-08 23:38:03 · 330 阅读 · 0 评论 -
(LeetCode C++)三数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。在排序后的给定数组中依次先选取一个数字,然后使用双指针,在剩余数组中寻找使总和为0的另外两个数字。链接:https://leetcode.cn/problems/3sum。你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。来源:力扣(LeetCode)原创 2022-09-07 21:53:43 · 1372 阅读 · 0 评论 -
(LeetCode C++)盛最多水的容器
链接:https://leetcode.cn/problems/container-with-most-water。双指针分别指向容器的左右边界,计算此时的容器容积,并与当前最大容积比较。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。如果左边界低于右边界,说明此时左边界是短板,因此将左边界向右移动1。如果右边界低于左边界,说明此时右边界是短板,因此将右边界向左移动1。就这样,每次移动一边的边界让两个边界靠拢,直到两个边界重合时结束。Method:双指针-盛最多水的容器。...原创 2022-08-29 22:28:36 · 429 阅读 · 0 评论 -
(LeetCode C++)最长回文子串
建立一个bool类型的二维数组,用来表示对应的子串是否为回文串。如果子串为回文串,则该位置为True,如果子串不是回文串,则该位置为False。链接:https://leetcode.cn/problems/longest-palindromic-substring。通过次数1,172,552提交次数3,162,132。为了避免遗漏,按照从后往前的流程进行遍历。解释:"aba" 同样是符合题意的答案。Method:基于动态规划求最长回文子串。来源:力扣(LeetCode)输入:s = "cbbd"...原创 2022-08-29 21:09:03 · 283 阅读 · 0 评论 -
(LeetCode C++)无重复字符的最长子串
链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters。Method 2:基于滑动窗口-双指针求无重复字符的最长子串。Method 1:基于滑窗法求无重复字符的最长子串。,请你找出其中不含有重复字符的。来源:力扣(LeetCode)...原创 2022-08-27 22:43:38 · 315 阅读 · 0 评论 -
(LeetCode C++)两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。链接:https://leetcode.cn/problems/add-two-numbers。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。请你将两个数相加,并以相同形式返回一个表示和的链表。来源:力扣(LeetCode)Method:两个单链表相加。...原创 2022-08-25 22:39:48 · 224 阅读 · 0 评论 -
(LeetCode C++)合并二叉树
想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。链接:https://leetcode.cn/problems/merge-two-binary-trees。给你两棵二叉树: root1 和 root2。注意: 合并过程必须从两个树的根节点开始。Method:递归遍历合并二叉树。返回合并后的二叉树。原创 2022-08-25 17:18:35 · 159 阅读 · 0 评论 -
(LeetCode C++)二叉树的直径
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。链接:https://leetcode.cn/problems/diameter-of-binary-tree。, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。两结点之间的路径长度是以它们之间边的数目表示。来源:力扣(LeetCode)Method:递归遍历二叉树。原创 2022-08-23 16:36:14 · 222 阅读 · 0 评论 -
(LeetCode C++)汉明距离(Hamming Distance)
链接https//leetcode.cn/problems/hamming-distance。指的是这两个数字对应二进制位不同的位置的数目。,计算并返回它们之间的汉明距离。来源力扣(LeetCode)原创 2022-07-21 15:41:02 · 489 阅读 · 0 评论 -
(LeetCode C++)找到数组中消失的数字
因此,给定一个数组A,假设我们遍历到一个值x,即A[index]=x,那我们便将A[x-1]的值+n,但是,如果此时A[x-1]尚未遍历到,这样会不会改变A[x-1]的值呢?为了解决这种问题,我们在每次取值时,都进行(A[index]-1)%n操作,这样可以保证既记录了数组中已经存在的数字,又不会影响我们读取原数组的值。我们注意到,数组的长度为n,因此数组的索引为0-(n-1),而数组中整数的值在0-n范围内。你可以假定返回的数组不算在额外空间内。来源力扣(LeetCode)...原创 2022-07-16 20:53:04 · 513 阅读 · 0 评论 -
(LeetCode C++)比特位计数
给你一个整数 n ,对于 0原创 2022-07-13 20:41:43 · 469 阅读 · 0 评论 -
(LeetCode C++)移动零
给定一个数组 ,编写一个函数将所有 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。示例1:示例2:提示:进阶:你能尽量减少完成的操作次数吗?Method 1:基于双指针的移动零方法Code:Method 2:基于记录个数的移动零方法Code:来源:力扣(LeetCode)链接:https://leetcode.cn/problems/move-zeroes...原创 2022-07-13 16:56:05 · 616 阅读 · 0 评论 -
(LeetCode C++)回文链表
给你一个单链表的头节点 ,请你判断该链表是否为回文链表。如果是,返回 ;否则,返回 。示例1: 示例2: 提示:进阶:你能否用 时间复杂度和 空间复杂度解决此题?首先,列表的实现是:Code:Method:反转链表前半部分,然后与链表后半部分比较Code:来源:力扣(LeetCode)链接:https://leetcode.cn/problems/palindrome-linked-list...原创 2022-07-12 22:11:27 · 394 阅读 · 0 评论 -
(LeetCode C++)翻转二叉树
给你一棵二叉树的根节点 ,翻转这棵二叉树,并返回其根节点。示例 1: 示例 2:示例 3:提示:首先,二叉树的实现是:Code:Method 1:基于递归的方法Code 1:Code 2:Method 2:基于栈的后续遍历方法Code:Method 3:基于队列的层序遍历方法Code:来源:力扣(LeetCode)链接:https://leetcode.cn/problems/invert-binary-tree Reference:【leetc原创 2022-07-12 15:51:41 · 743 阅读 · 0 评论 -
(LeetCode C++)反转链表
给你单链表的头节点 ,请你反转链表,并返回反转后的链表。示例1: 示例2: 示例3:提示:进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?首先,链表的实现方式为:Code:Code:来源:力扣(LeetCode)链接:https://leetcode.cn/problems/reverse-linked-list...原创 2022-07-10 21:48:56 · 638 阅读 · 0 评论 -
(LeetCode C++)多数元素
给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例1:示例2:提示:进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。Method 1:基于map/unordered_map遍历的方法Code:Method 2:基于排序的方法Code:Method 3:基于随机数的方法Code 1:Code 2:Method原创 2022-07-10 20:00:08 · 773 阅读 · 0 评论 -
(LeetCode C++)相交链表
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。自定义评测:评测系统 的输入如下(你设计的程序 不适用 此输入):评测系统将根据这些输入创建链式数据结构,并将两个头节点 headA 和 headB 传递给你的程序。如果程序能够正确返回相交节点,那么你的解决方案将被 视作正确答案 。示例原创 2022-07-09 21:01:05 · 102 阅读 · 0 评论 -
(LeetCode C++)环形链表
给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true 。 否则,返回 false 。示例1:示例2: 示例3: 提示:链表中节点的数目范围是 [0, 104]-105 ...原创 2022-07-09 16:42:58 · 255 阅读 · 0 评论 -
(LeetCode C++)只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:示例 2:Method 1:基于哈希表的方法Code:Method 2:基于异或运算的方法这是我个人感觉很巧妙的一种方法,参考自其他博主的代码。我们可以发现,在给定的非空整数数组内,元素的出现次数仅有1次/2次。这个条件是一个突破口,意味着可以使用异或运算来解决这个问题。首先,异或运算的性质如下:根据题目原创 2022-07-08 15:27:36 · 2261 阅读 · 0 评论