LeetCode
刷题记录,可随时复习查看
菜鸟不会飞~
这个作者很懒,什么都没留下…
展开
-
二叉树层序遍历
102. 二叉树的层序遍历难度:中等题目给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回其层序遍历结果:[ [3], [9,20], [15,7]]解题:实际上就是广度优先遍历,只不过需要记录每一层的个数。class Solution {public: vector<v原创 2021-08-03 21:39:01 · 114 阅读 · 0 评论 -
236. 二叉树的最近公共祖先
难度: 中等题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例:输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3 。示例:输入:root = [3,5,1,6,2,0原创 2021-07-29 22:31:11 · 57 阅读 · 0 评论 -
124. 二叉树中的最大路径和
难度: 困难(感觉不到)题目:路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。示例: 1 / \ 2 3最优路径 2->1->3,和为6示例: -10 / \ 9 20 / \ 15 7 最原创 2021-07-27 22:27:26 · 119 阅读 · 0 评论 -
110. 平衡二叉树
难度: 简单题目:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。解题自顶向下从顶向下计算,需要计算每个节点的左右子树高度,并且左右子树各自也要满足平衡,这样在判断左右子树是否平衡时对之前计算过的高度,又重复计算。class Solution {public: int height(TreeNode* root) { if (root == NULL) {转载 2021-07-25 18:39:26 · 70 阅读 · 0 评论 -
338. 比特位计数
难度: 简单题目: 给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例 2:输入: 5输出: [0,1,1,2,1,2]解题:x&(x-1) 这个公式很关键,比如5 | 1014 | 1003 | 0112 | 0101 | 0010 | 000每个数字与比它小1的数字进行按位与运算,会将从右至左的最后一个1去掉。对于一个数字去求它二原创 2021-07-21 23:33:12 · 115 阅读 · 1 评论 -
234. 回文链表
难度: 简单题目: 请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true解题:题目如果使用额外的空间实现起来很简单,两次遍历就完成。进阶的方法是将后半部分链表进行反转,查找链表一半的位置,可以用快慢指针的方式,进行遍历,找到中间的节点,将此节点作为头节点,反转剩余部分。偶数情况下反转后:1->2 2<-1奇数情况下反转后:1->2->3 2转载 2021-07-20 22:59:39 · 58 阅读 · 0 评论 -
226. 翻转二叉树
难度: 简单题目:翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1解题:迭代与递归的思路都一样,都是交换每个节点的子节点,只不过遍历方式不同,迭代需要借用队列遍历。迭代class Solution {public: TreeNode* invertTree(TreeNode* root) {原创 2021-07-18 21:33:21 · 44 阅读 · 0 评论 -
206. 反转链表
难度: 简单题目: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。解题:迭代采用双指针的方式思路,分别用来记录前一个指针和后一个指针,每次遍历将当前节点的next指向前一个节点。class Solution {public: ListNode* reverseList(ListNode* head) { ListNode* prev = nullptr; ListNode* next = nullptr; while (原创 2021-07-17 22:14:54 · 65 阅读 · 1 评论 -
141. 环形链表
难度: 简单题目:给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释转载 2021-07-15 22:32:23 · 53 阅读 · 0 评论 -
121. 买卖股票的最佳时机
难度: 简单题目:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5原创 2021-07-14 22:58:21 · 59 阅读 · 0 评论 -
104. 二叉树的最大深度
作者:LeetCode-Solution链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/solution/er-cha-shu-de-zui-da-shen-du-by-leetcode-solution/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。难度: 简单题目:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说转载 2021-07-13 21:48:49 · 52 阅读 · 0 评论 -
101. 对称二叉树
难度: 简答题目:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3解题可以将整棵树拆分成左右两颗子树来验证对称性,左子树的左节点,等于右子树的右节点;反之亦然。需要同时记录左右两个子树的节点遍历。递归递归思路原创 2021-07-12 21:09:16 · 70 阅读 · 0 评论 -
136. 只出现一次的数字
难度: 简单题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4解题:这道题刚开始考虑半天没思路,不知道怎么用线性时间复杂度解题目,看了答案之后,才知道是再考察位运算。引申出一个知识点:两个相同的十进制数异或的结果一定位零。任何一个数和 0 的异或结果一定是它本身。异或运算满足结合律和交换律。用到本题就可以很简单地得到结果。原创 2021-07-08 21:51:58 · 47 阅读 · 0 评论 -
94. 二叉树的中序遍历
难度: 简单题目:给定一个二叉树的根节点 root ,返回它的 中序 遍历。解题:迭代中序遍历要对父节点进行记录,遍历完左子节点后再打印父节点,因此借助栈来解题。将当前节点是否为空以及栈是否为空作为循环条件(或关系);若当前节点不为空则将此节点压入栈,使当前节点指针指向左子节点,继续遍历;否则将当前指针指向栈顶并弹出,即此节点的父节点,打印,遍历其右节点。class Solution {public: vector<int> inorderTraversal(TreeNo原创 2021-07-07 23:26:35 · 105 阅读 · 2 评论 -
70. 爬楼梯
难度: 简单题目:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意: 给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶解题:这个题在Leetcode上使用递归会超时。转载 2021-07-06 23:07:14 · 53 阅读 · 0 评论 -
53. 最大子序和
难度: 简单题目:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 4:输入:nums = [-1]输出:-1示例 5:输入:nums = [-100000]输出:-10000原创 2021-07-05 22:51:49 · 44 阅读 · 1 评论 -
21. 合并两个有序链表
难度: 简单题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1 = [], l2 = []输出:[]示例3:输入:l1 = [], l2 = [0]输出:[0]解题:这题直接遍历两个链表,对比L1和L2,若L1当前所指元素小则将此结点加入新链表,然后向后移动;L2同理。若有一个链表移动到了结尾,结束遍历,将非结原创 2021-07-04 21:01:36 · 67 阅读 · 0 评论 -
20. 有效的括号
难度: 简单题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false示例 4:输入:s = "([)]"输出:false示例 5:输入:s = "{[]}"输出:true思路:这道原创 2021-07-03 23:47:07 · 43 阅读 · 0 评论 -
1863. 找出所有子集的异或总和再求和
难度: 简单一个数组的 异或总和 定义为数组中所有元素按位 XOR 的结果;如果数组为 空 ,则异或总和为 0 。例如,数组 [2,5,6] 的 异或总和 为 2 XOR 5 XOR 6 = 1 。给你一个数组 nums ,请你求出 nums 中每个 子集 的 异或总和 ,计算并返回这些值相加之 和 。注意: 在本题中,元素 相同 的不同子集应 多次 计数。数组 a 是数组 b 的一个 子集 的前提条件是:从 b 删除几个(也可能不删除)元素能够得到 a 。示例 1:输入:nums = [1,原创 2021-06-30 23:58:04 · 252 阅读 · 3 评论 -
26. 删除有序数组中的重复项
难度: 简单题目:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。示例 2:输入:nums = [0,0,1,1,1,2,2原创 2021-06-28 22:59:36 · 398 阅读 · 1 评论