leetcode
FangYwang
这个作者很懒,什么都没留下…
展开
-
【代码随想录37期】Day27 组合总和 40.组合总和II 131.分割回文串
【代码】【代码随想录37期】Day27 组合总和 40.组合总和II 131.分割回文串。原创 2024-06-04 01:32:04 · 399 阅读 · 0 评论 -
【代码随想录37期】Day25 组合总和III 、17.电话号码的字母组合
【代码】【代码随想录37期】Day25 组合总和III 、17.电话号码的字母组合。原创 2024-06-02 23:33:34 · 168 阅读 · 0 评论 -
【代码随想录37期】Day24 回溯 组合
回溯是一种搜索方式,通常通过穷举来解决问题,核心思想是从一个初始状态出发、暴力搜索所有可能的方案,遇到正确的解法则记录下来,直到结束,这是一个回溯:时间回溯!原创 2024-06-02 23:31:21 · 215 阅读 · 0 评论 -
【代码随想录37期】Day23 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树
【代码】【代码随想录37期】Day23 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树。原创 2024-06-02 23:28:47 · 135 阅读 · 0 评论 -
【代码随想录37期】Day22 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
【代码】【代码随想录37期】Day22 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点。原创 2024-06-02 23:25:46 · 197 阅读 · 0 评论 -
【代码随想录37期】Day21 530.二叉搜索树的最小绝对差 、501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先
【代码】【代码随想录37期】Day21 530.二叉搜索树的最小绝对差 、501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先。原创 2024-06-02 23:21:22 · 107 阅读 · 0 评论 -
【代码随想录37期】Day20 最大二叉树、合并二叉树、二叉搜索树中的搜索、验证二叉搜索树
【代码】【代码随想录37期】Day19 最大二叉树、合并二叉树、二叉搜索树中的搜索、验证二叉搜索树。原创 2024-06-02 23:16:18 · 235 阅读 · 0 评论 -
【代码随想录37期】Day18 找树左下角的值、路径总和、从中序与后序遍历序列构造二叉树
【代码】【代码随想录37期】Day18 找树左下角的值、路径总和、从中序与后序遍历序列构造二叉树。原创 2024-05-27 01:36:58 · 284 阅读 · 0 评论 -
【代码随想录37期】Day17 平衡二叉树、二叉树的所有路径、左叶子之和
平衡二叉树int traversal(TreeNode* cur, int depth){ if (!cur) return depth; int left_depth = traversal(cur->left, depth + 1); int right_depth = traversal(cur->right, depth + 1); if (left_depth == -1 || right_depth == -1) r原创 2024-05-24 13:47:47 · 456 阅读 · 0 评论 -
【代码随想录37期】Day16 二叉树的最大深度、二叉树的最小深度、完全二叉树的节点个数
注意depth不好直接作为返回值,使用全局变量ret替代之。原创 2024-05-24 01:16:18 · 205 阅读 · 0 评论 -
【代码随想录37期】Day15 层序遍历、翻转二叉树、对称二叉树
代码随想录102. 二叉树的层序遍历 - 力扣(LeetCode)107. 二叉树的层序遍历 II - 力扣(LeetCode)199. 二叉树的右视图 - 力扣(LeetCode)637. 二叉树的层平均值 - 力扣(LeetCode)429. N 叉树的层序遍历 - 力扣(LeetCode)515. 在每个树行中找最大值 - 力扣(LeetCode)116. 填充每个节点的下一个右侧节点指针 - 力扣(LeetCode)104. 二叉树的最大深度 - 力扣(LeetCode)力扣(Lee原创 2024-05-22 13:49:24 · 225 阅读 · 0 评论 -
【代码随想录37期】Day14 二叉树的前序遍历、二叉树的中序遍历、二叉树的后序遍历
广度搜索:使用队列来实现,这也是队列先进先出的特点所决定的,因为需要先进先出的结构,才能一层一层的来遍历二叉树。,也就说前中后序遍历的逻辑其实都是可以借助栈使用递归的方式来实现的。原创 2024-05-21 13:42:46 · 504 阅读 · 0 评论 -
【代码随想录37期】Day13 滑动窗口最大值、前K个高频元素
若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。如果使用大顶堆,队列的特点是只能从队头出,那样最大的元素就会被弹出,我们需要的就是最大的K个元素,所以应该使用小顶堆把最小的元素弹出。我们在力扣写代码时,是在solution类里面,我们直接在这里面写的函数是该类的成员函数,非静态成员函数有一个。,因为优先级队列对外接口只是从队头取元素,从队尾添加元素,再无其他取元素的方式,使用容器适配器:队列。原创 2024-05-20 13:17:00 · 691 阅读 · 0 评论 -
【代码随想录37期】Day11 有效的括号、删除字符串中的所有相邻重复项、逆波兰表达式求值
3)遇到运算符“+”,将a和b出栈,执行a+b的操作,得到结果d=a+b,再将d入栈(0位置)两个元素弹出作相应运算,结果再入栈,最后当表达式扫描完后,栈里的就是结果。两个元素出栈,执行运算,得到的结果再入栈的原则来进行处理,那么ab+c。Notation,RPN,或逆波兰记法),也叫后缀表达式(将。经过以上运算,计算机就可以得到(a+b)*c的运算结果e了。,如果当前字符为变量或者为数字,则压栈,如果是运算符,则将。c的操作,得到结果e,再将e入栈(0位置)”,将d和c出栈,执行d。4)c入栈(1位置)原创 2024-05-19 19:40:58 · 388 阅读 · 0 评论 -
【代码随想录37期】第二周总结
resize是为了把后面冗余的部分去掉至于新的大小为什么是slow,看slow的循环即可,slow最后多一个slow++,数值上正好是size的大小(大小为slow的下标是0 ~ slow-1)原创 2024-05-19 19:38:18 · 720 阅读 · 0 评论 -
【代码随想录37期】Day10 用栈实现队列、用队列实现栈
v3.0:第三版代码,去掉了队列2的使用,将队列除了尾部元素之外重新入队,即可将原本的队尾元素移动到队首,从而去掉该元素。初版代码:根据自己思路实现的,确保pop时一个队列为空,然后将另一个队列的元素都移动到该队列,只留下最后一个元素。第二版代码,使用了q1 = q2;再清空q2的做法,避免了很多q1和q2来回交换的做法,明确了q1和q2的职责。原创 2024-05-17 13:06:40 · 312 阅读 · 0 评论 -
【代码随想录37期】Day08 反转字符串、反转字符串Ⅱ、替换数字、反转字符串里面的单词、右旋转字符串
下面的声明和初始化创建了一个 “Hello” 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 “Hello” 的字符数多一个。字符串实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。使用整体反转+局部反转就可以实现反转单词顺序的目的。而使用局部反转+整体反转就可以实现反转字母顺序的目的。问题:1. erase与for循环嵌套时间复杂度高。注意的一点是reverse是左闭右开。原创 2024-05-15 22:00:24 · 458 阅读 · 0 评论 -
【代码随想录37期】Day07四数相加Ⅱ、赎金信、三数之和、四数之和
【代码】【代码随想录37期】Day07四数相加Ⅱ、赎金信、三数之和、四数之和。原创 2024-05-14 22:53:02 · 191 阅读 · 0 评论 -
【代码随想录37期】Day06 有效的字母异位词、两个数组的交集、快乐数、两数之和
【代码】【代码随想录37期】Day06 有效的字母异位词、两个数组的交集、快乐数、两数之和。原创 2024-05-13 14:06:19 · 217 阅读 · 0 评论 -
【代码随想录37期】 第一周总结
已知进入for循环时right<nums.size(),要满足sum >= target,left与right之间至少要有一个数,也就是nums[right],此时left<right<nums.size();原创 2024-05-12 19:51:53 · 906 阅读 · 0 评论 -
【代码随想录37期】Day04 两两交换链表中的节点、删除链表的倒数第N个节点、链表相交、环形链表II
注意使用虚拟头节点,可以避免对头节点的判断,防止各种复杂情况。原创 2024-05-11 21:56:58 · 200 阅读 · 0 评论 -
【代码随想录37期】Day02 有序数组的平方、长度最小的子数组、螺旋矩阵Ⅱ
当两个数相等时,一定是相邻排列的,放在大于的情况,会优先放end,下一个数如果还想等,还是先放end,等到不相等了,要么end还在0右边,要么在0左边但是在begin右边,怎么都比begin小,所以等于时一定是相邻的。移动两步,end有溢出的风险,例如left=right时。原创 2024-05-10 23:09:18 · 284 阅读 · 0 评论 -
【代码随想录37期】Day01 二分查找 + 移除元素
二分查找详解 + 双指针移除元素 详解原创 2024-05-08 22:43:55 · 535 阅读 · 2 评论 -
力扣217.存在重复元素 使用多种方法
题目描述给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true来源:力扣(LeetCode)链接C++利用set集合性质class Solution {public: bool原创 2021-10-28 15:52:52 · 256 阅读 · 0 评论 -
力扣160.相交链表
题目描述编写一个程序,找到两个单链表相交的起始节点。注意:如果两个链表没有交点,返回 null.在返回结果后,两个链表仍须保持原有的结构。可假定整个链表结构中没有循环。程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。解题思路循环思想+双指针一个指针从headA遍历,直到为NULL时改从headB遍历另一个指针同理如果二者有公共地址,则两个指针一定是在进入公共路径时相遇相遇时走过的长度都是A非公共路段+B非公共路段+AB公共路段代码/** * Defini原创 2021-03-30 09:43:19 · 128 阅读 · 1 评论 -
力扣141.环形链表
题目描述给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。如果链表中存在环,则返回 true 。 否则,返回 false 。解题思路追及相遇问题参考快乐数的做法代码/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */bool hasC原创 2021-03-29 21:47:38 · 79 阅读 · 0 评论 -
力扣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 阶解题思路滑动窗口登上第n阶的方法数 = 登上第原创 2021-03-28 11:31:39 · 71 阅读 · 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]输出:-10原创 2021-03-27 11:45:54 · 127 阅读 · 0 评论 -
力扣21.合并有序链表
题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按 非递减顺序原创 2021-03-27 11:43:26 · 73 阅读 · 0 评论 -
力扣20.有效的括号
题目描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false示例 4:输入:s = "([)]"输出:false示例 5:输入:s = "{[]}"输出:true提原创 2021-03-23 09:56:54 · 127 阅读 · 0 评论 -
力扣1175.质数排列
题目描述请你帮忙给从 1 到 n 的数设计排列方案,使得所有的「质数」都应该被放在「质数索引」(索引从 1 开始)上;你需要返回可能的方案总数。让我们一起来回顾一下「质数」:质数一定是大于 1 的,并且不能用两个小于它的正整数的乘积来表示。由于答案可能会很大,所以请你返回答案 模 mod 10^9 + 7 之后的结果即可。示例示例 1:输入:n = 5输出:12解释:举个例子,[1,2,5,4,3] 是一个有效的排列,但 [5,2,3,4,1] 不是,因为在第二种情况里质数 5原创 2021-03-17 16:35:28 · 135 阅读 · 0 评论 -
力扣报错“AddressSanitizer:DEADLYSIGNAL==ERROR: AddressSanitizer:stack-overflow on address“的解决方案
做力扣报了个错:AddressSanitizer: stack-overflow on address 0x6020000001cc at pc……大概意思LeetCode使用了AddressSanitizer检查了是否存在无限递归,或是数组越界,我这里遇到的是无限递归Address Sanitizer(ASan)是一个快速的内存错误检测工具。从gcc 4.8开始,AddressSanitizer成为gcc的一部分。解决方案无限递归就是看看怎么改一下跳出递归数组越界一般是修改循环条原创 2021-03-17 15:41:49 · 12571 阅读 · 0 评论 -
力扣914.卡牌分组
题目描述给定一副牌,每张牌上都写着一个整数。此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌。 组内所有的牌上都写着相同的整数。仅当你可选的 X >= 2 时返回 true。示例示例 1:输入:[1,2,3,4,4,3,2,1]输出:true解释:可行的分组是 [1,1],[2,2],[3,3],[4,4]示例 2:输入:[1,1,1,2,2,2,3,3]输出:false解释:没有满足要求的分组。原创 2021-03-16 10:04:14 · 128 阅读 · 0 评论 -
力扣报错“AddressSanitizer: heap-buffer-overflow on address...”的解决办法
做力扣报了个错:AddressSanitizer: heap-buffer-overflow on address 0x6020000001cc at pc……大概意思LeetCode使用了AddressSanitizer检查了是否存在内存非法访问,一般是数组越界,上下都有可能Address Sanitizer(ASan)是一个快速的内存错误检测工具。从gcc 4.8开始,AddressSanitizer成为gcc的一部分。解决方案一般是修改循环条件,如:<改为<=原创 2021-03-16 10:01:21 · 14308 阅读 · 2 评论 -
力扣面试题16.05.阶乘尾数
题目描述设计一个算法,算出 n 阶乘有多少个尾随零。示 例示例 1:输入: 3输出: 0解释: 3! = 6, 尾数中没有零。示例 2:输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.说明: 你算法的时间复杂度应为 O(log n) 。解题思路第一层:数尾数有几个零实际上是看能被几个10整除第二层:能被几个10整除实际上是看有几个因子5和2第三层:有几个因子5和2实际上是有几个因子5第四层:看有几个因子5直接n/5第五层:在第四层每个原创 2021-03-15 16:52:55 · 114 阅读 · 0 评论 -
力扣1103.分糖果
题目描述排排坐,分糖果。我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友。给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 n 颗糖果。然后,我们再回到队伍的起点,给第一个小朋友 n + 1 颗糖果,第二个小朋友 n + 2 颗,依此类推,直到给最后一个小朋友 2 * n 颗糖果。重复上述过程(每次都比上一次多给出一颗糖果,当到达队伍终点后再次从队伍起点开始),直到我们分完所有的糖果。注意,就算我们手中的剩下糖原创 2021-03-14 21:59:04 · 135 阅读 · 0 评论 -
力扣836.矩形重叠
题目描述矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。矩形的上下边平行于 x 轴,左右边平行于 y 轴。如果相交的面积为 正 ,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。给出两个矩形 rec1 和 rec2 。如果它们重叠,返回 true;否则,返回 false 。示例示例 1:输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]输出:true示原创 2021-03-13 12:21:34 · 177 阅读 · 1 评论 -
力扣628. 三个数的最大乘积
题目描述给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。示例示例 1:输入:nums = [1,2,3]输出:6示例 2:输入:nums = [1,2,3,4]输出:24示例 3:输入:nums = [-1,-2,-3]输出:-6提示:3 <= nums.length <= 104-1000 <= nums[i] <= 1000解题思路c语言直接写一个快排:找一个基准值,这个值左边的数都小于它,右边原创 2021-03-12 09:32:52 · 157 阅读 · 1 评论 -
力扣1512.好数对的数目
题目描述给你一个整数数组 nums 。如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。返回好数对的数目。示例示例 1:输入:nums = [1,2,3,1,1,3]输出:4解释:有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始示例 2:输入:nums = [1,1,1,1]输出:6解释:数组中的每组数字都是好数对示例 3:输入:nums =原创 2021-03-03 16:18:34 · 149 阅读 · 1 评论 -
力扣868. 二进制间距
题目描述给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,“1001” 中的两个 1 的距离为 3 。示例示例 1:输入:n = 22输出:2解释:22 的二进制是 "10110" 。在 22 的二进制表示中,有三个 1,组成两对相邻的 1 。第一对相邻的 1原创 2021-02-17 15:47:43 · 229 阅读 · 3 评论