自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(95)
  • 资源 (1)
  • 收藏
  • 关注

原创 bug:run_simple,以一种访问权限不允许的方式做了一个访问套接字的尝试。

使用werkzeug.serving出现以一种访问权限不允许的方式做了一个访问套接字的尝试错误。因为8000端口被占用,改为8001或者其他未被占用的端口即可。

2023-03-16 15:03:05 380

原创 LeetCode-动规-最长递增子序列、最长连续递增序列、最长重复子数组、最长公共子序列、不相交的线、最大子数组和、判断子序列、不同的子序列、两个字符串的删除操作、编辑距离、回文子串、最长回文子序列

最长递增子序列最长连续递增序列最长重复子数组最长公共子序列不相交的线最大子数组和判断子序列不同的子序列两个字符串的删除操作编辑距离回文子串最长回文子序列

2022-07-11 10:28:08 350 2

原创 LeetCode(C++)-动态规划(股票问题)

121. 买卖股票的最佳时机122. 买卖股票的最佳时机 II123. 买卖股票的最佳时机 III188. 买卖股票的最佳时机 IV309. 最佳买卖股票时机含冷冻期714. 买卖股票的最佳时机含手续费

2022-07-09 10:41:55 530

原创 LeetCode(C++)-动态规划(打家劫舍、打家劫舍II、打家劫舍III)

198. 打家劫舍213. 打家劫舍 II337. 打家劫舍 III

2022-07-06 09:51:11 635

原创 LeetCode(C++)-动态规划-完全背包(零钱兑换 II、组合总和 Ⅳ、零钱兑换、完全平方数、单词拆分)

518. 零钱兑换 II377. 组合总和 Ⅳ322. 零钱兑换279. 完全平方数139. 单词拆分

2022-07-05 11:29:21 145

原创 LeetCode(C++)-动态规划(分割等和子集、最后一块石头的重量II、目标和、一和零)

416. 分割等和子集1049. 最后一块石头的重量II494. 目标和474. 一和零

2022-07-04 21:45:41 299

原创 LeetCode(C++)-动态规划(使用最小花费爬楼梯、不同路径、不同路径 II、整数拆分、不同的二叉搜索树)

746. 使用最小花费爬楼梯62. 不同路径63. 不同路径 II343. 整数拆分96. 不同的二叉搜索树

2022-07-04 10:49:59 442

原创 LeetCode-动态规划(斐波那契数、爬楼梯)

动态规划五部曲:1. 确定dp数组以及下标的含义2. 确定递推公式3. dp数组如何初始化4. 确定遍历顺序5. 举例推导dp数组509. 斐波那契数70. 爬楼梯

2022-07-02 19:54:01 94

原创 LeetCode(C++)-贪心算法(用最少数量的箭引爆气球、无重叠区间、划分字母区间、合并区间、买卖股票的最佳时机含手续费、单调递增的数字、监控二叉树)

452. 用最少数量的箭引爆气球435. 无重叠区间763. 划分字母区间56. 合并区间738. 单调递增的数字714. 买卖股票的最佳时机含手续费968. 监控二叉树

2022-07-01 21:00:47 498

原创 LeetCode(C++)-贪心算法(加油站、分发糖果、柠檬水找零、根据身高重建队列)

134. 加油站135. 分发糖果860. 柠檬水找零406. 根据身高重建队列

2022-06-30 19:36:23 431

原创 LeetCode-贪心算法(分发饼干、摆动序列、最大子数组和、买卖股票的最佳时机 II、跳跃游戏、跳跃游戏 II、K 次取反后最大化的数组和)

455. 分发饼干376. 摆动序列53. 最大子数组和122. 买卖股票的最佳时机 II55. 跳跃游戏45. 跳跃游戏 II1005. K 次取反后最大化的数组和

2022-06-29 17:24:58 708

原创 LeetCode-解数独(C++)

编写一个程序,通过填充空格来解决数独问题。数独的解法需 遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用 ‘.’ 表示。示例 1:输入:board = [[“5”,“3”,“.”,“.”,“7”,“.”,“.”,“.”,“.”],[“6”,“.”,“.”,“1”,“9”,“5”,“.”,“.”,“.”],[“.”,“9”,“8”,“.”,“.”,“

2022-06-28 19:44:01 711

原创 LeetCode-N 皇后(C++)

按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。示例 1:输入:n = 4输出:[[“.Q…”,“…Q”,“Q…”,“…Q.”],[“…Q.”,“Q…”,“…Q”,“.Q…”]]解释:如上图所示,4 皇后问题存

2022-06-28 18:34:11 382

原创 LeetCode-重新安排行程(C++)

给你一份航线列表 tickets ,其中 tickets[i] = [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。例如,行程 [“JFK”, “LGA”] 与 [“JFK”, “LGB”] 相比就更小,排序更靠前。假定所有机票至少存在一种合理的行程。且所有的机票 必须都用一次 且 只能用一次。示例 1:输入:ti

2022-06-28 16:24:05 481

原创 LeetCode-全排列 II(C++)

47. 全排列 II给定一个可包含重复数字的序列 nums ,按任意顺序返回所有不重复的全排列。示例 1:输入:nums = [1,1,2]输出:[[1,1,2],[1,2,1],[2,1,1]]这道题在全排列的基础上更进一步,多了一步去重,如下图所示。先给数组排好序,在树的同一层,如果它的前一个元素值与它相同,则当前元素不继续往下遍历,跳过该元素。我们可以定义一个used数组,标识元素是在同一树枝使用过,还是在同一树层使用过,used[i]=true表示同一树枝使用过,used[i]=fal

2022-06-28 10:05:27 250

原创 LeetCode-全排列(C++)

46. 全排列给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]思路:本题使用回溯算法,如下图所示,第一层取1,剩余元素{2,3},第二层在剩余元素里取2,剩下3,然后取3,得到第一个排列。可以看出跟之前组合问题是不一样的,组合问题会用到startIndex标识起始位置,而排列问题是无法标识的,因为每一个元

2022-06-27 22:10:35 713

原创 LeetCode-递增子序列(C++)

491. 递增子序列给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。示例 1:输入:nums = [4,6,7,7]输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]思路:本题使用回溯算法,分析题目可知,本题需要找递增子序列,所以不能对数组进行排序。另外,数组中含有重复

2022-06-27 16:39:15 702

原创 LeetCode-子集 II(C++)

90. 子集 II给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。示例 1:输入:nums = [1,2,2]输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]思路:本题是在子集的基础上更进一步,本题要求不能包含重复的子集,这个去重思路是与组合总和II相同。所以如果理解了前面这两道题,这道题就非常容易了。本题用的去重方法和组合总和II中使用used数组去重的方法不一样。本题

2022-06-27 15:02:13 254

原创 LeetCode-子集(C++)

78. 子集给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]思路:本题使用回溯算法,for循环横向遍历,递归纵向遍历,把它想象成树状结构,收集每一个节点值。定义全局变量result为结果集,path为收集到的子集。因为把result.push_back(path);写到了p

2022-06-27 11:39:20 314

原创 LeetCode-复原 IP 地址(C++)

93. 复原 IP 地址有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。你 不能 重新排

2022-06-27 10:45:47 533

原创 LeetCode-分割回文串(C++)

131. 分割回文串给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。示例 1:输入:s = “aab”输出:[[“a”,“a”,“b”],[“aa”,“b”]]思路:本题用回溯算法,具体可参考代码随想录。首先定义全局变量result为结果集,path保存切割好的回文子串。对于示例1,for循环横向遍历,在aab中先截取a,然后截取aa,然后aab。递归纵向遍历,在截取a的下面在截取a,截取ab;在截取aa的下

2022-06-26 11:48:40 847 1

原创 LeetCode-组合总和 II

40. 组合总和 II给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用 一次 。注意:解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,输出:[[1,1,6],[1,2,5],[1,7],[2,6]]思路:本题使用回溯算法,首先定义全局变量result为结果集,pa

2022-06-26 10:12:14 249

原创 数组越界问题(C++)

错误信息:Line 1034: Char 34: runtime error: addition of unsigned offset to 0x603000000040 overflowed to 0x60300000003c (stl_vector.h)SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/…/lib/gcc/x86_64-linux-gnu/9/…/…/…/…/include/c++/9/bits/stl_

2022-06-26 09:56:30 1235

原创 LeetCode-组合总和(C++)

39. 组合总和给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为 target 的不同组合数少于 150 个。示例 1:输入:candidates = [2,3,6,7], target

2022-06-25 16:44:12 496

原创 LeetCode-电话号码的字母组合(C++)

17. 电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = “23”输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]思路:用回溯算法,首先定义一个数字到字母的映射letterMap,然后定义两个全局变量,result表示结果集,path表示收集到的字母组合。确定回溯函数的参数,数字组合dig

2022-06-25 15:38:24 355

原创 LeetCode-组合总和 III(C++)

216. 组合总和 III找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:只使用数字1到9每个数字 最多使用一次返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。示例 1:输入: k = 3, n = 7输出: [[1,2,4]]解释:1 + 2 + 4 = 7没有其他符合的组合了。思路:用回溯算法,定义全局变量result为结果集,path为每次搜索的路径,sum为每次搜索路径的和。然后回溯三部曲,参数列表为n,k和起始搜索startInd

2022-06-25 11:42:35 477

原创 LeetCode题-组合(C++)

77. 组合给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 1:输入:n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]思路:这道题可以用回溯算法,回溯法的搜索过程就是一个树型结构的遍历过程,for循环用来横向遍历,递归的过程是纵向遍历。代码:参考资料:代码随想录...

2022-06-25 09:54:51 279

原创 把二叉搜索树转换为累加树(C++)

538. 把二叉搜索树转换为累加树给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。思路:仔细观察示例1,发现累加树是将二叉搜索树中序遍历数组反序,然后逐渐累加,也就是这道题其实是反的中序遍历(右中左),然后当前节点的值

2022-06-24 16:08:57 91

原创 将有序数组转换为二叉搜索树(C++)

108. 将有序数组转换为二叉搜索树给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。示例 1:输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案思路:每次用数组中间元素去建立一个新的节点,然后root->left等于数组左半部分区间的中间值,ro

2022-06-23 20:12:03 405

原创 修剪二叉搜索树(C++)

669. 修剪二叉搜索树给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在 唯一的答案 。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。示例 1:输入:root = [1,0,2], low = 1, high = 2输出:[1,null,2]思路:

2022-06-23 19:41:29 124

原创 链表错误:AddressSanitizer: heap-use-after-free on address

ERROR: AddressSanitizer: heap-use-after-free on address 0x603000000258 at pc 0x00000037c6f5 bp 0x7ffea5071f90 sp 0x7ffea5071f88READ of size 8 at 0x603000000258 thread T0#3 0x7f3fea5be082 (/lib/x86_64-linux-gnu/libc.so.6+0x24082)0x603000000258 is locate

2022-06-23 17:38:12 3395 1

原创 删除二叉搜索树中的节点(C++)

450. 删除二叉搜索树中的节点给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。示例 1:输入:root = [5,3,6,2,4,null,7], key = 3输出:[5,4,6,2,null,null,7]解释:给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。思路:递归查找

2022-06-23 16:18:27 484

原创 二叉搜索树中的插入操作(C++)

701. 二叉搜索树中的插入操作给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。示例 1:输入:root = [4,2,7,1,3], val = 5输出:[4,2,7,1,3,5]思路:递归查找适合的位置,找到空节点就插入。代码:...

2022-06-22 15:56:36 497

原创 二叉搜索树的最近公共祖先(C++)

235. 二叉搜索树的最近公共祖先给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出:

2022-06-22 15:12:31 365

原创 二叉树的最近公共祖先(C++)

236. 二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3 。思路:用后序遍历的方法,自底向上去遍历二叉树,遇

2022-06-21 22:25:53 819

原创 二叉搜索树中的众数(C++)

501. 二叉搜索树中的众数给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。如果树中有不止一个众数,可以按 任意顺序 返回。假定 BST 满足如下定义:结点左子树中所含节点的值 小于等于 当前节点的值结点右子树中所含节点的值 大于等于 当前节点的值左子树和右子树都是二叉搜索树示例 1:输入:root = [1,null,2,2]输出:[2]思路:二叉搜索树,中序遍历是有序的,所以中序遍历二叉树,相同的值一定相邻,如果当前节点与

2022-06-20 22:06:03 187

原创 二叉搜索树的最小绝对差(C++)

530. 二叉搜索树的最小绝对差给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。差值是一个正数,其数值等于两值之差的绝对值。示例 1:输入:root = [4,2,6,1,3]输出:1思路:利用二叉搜索树中序遍历有序的特性,用中序遍历当前值减去前一个值,找到最小的即可。方法一:递归法方法二:迭代法参考资料:代码随想录...

2022-06-20 19:44:12 128

原创 验证二叉搜索树(C++)

98. 验证二叉搜索树给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:方法一:递归遍历每一个节点,判断当前节点的左子树的节点值是否都小于该节点值,右子树的节点值是否都大于该节点值。1. 确定递归函数的参数以及返回值:参数为根节点,返回值为bool类型。2. 确定终止条件:如果当前节点为空,返回true。3. 确定单

2022-06-20 16:42:08 624

原创 二叉搜索树中的搜索(C++)

思路:递归搜索二叉树。1. 确定递归函数返回值和参数列表:返回值为节点值等于val的节点,参数列表为根节点和要搜索的val值。2. 确定终止条件:如果当前节点为空或者找到了要搜索的节点,就返回该节点。3. 确定单层递归逻辑:如果当前节点值大于要搜索的值,就搜索左子树;如果小于要搜索的值,就搜索右子树。如果左右子树找不到该值,返回空。...

2022-06-19 17:09:18 74

原创 合并二叉树(C++)

617. 合并二叉树给你两棵二叉树: root1 和 root2 。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。返回合并后的二叉树。注意: 合并过程必须从两个树的根节点开始。示例 1:输入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]输出:[3

2022-06-19 16:36:16 597

C++实现vector。构造Constructors,析构,运算符重载operators,vector迭代器实现,assign等

模拟vector,Constructors, operators, assign, at, back, begin, clear, empty, end, erase, front, insert, pop_back, push_back, reserve, resize, size, swap,迭代器实现。

2022-06-18

空空如也

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

TA关注的人

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