自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 linux.9 Linux多线程

文章目录1.Linux线程概念1.1 什么是线程1.2 线程的优缺点1.3 Linux进程和线程2.Linux线程控制2.1 创建线程2.2 线程等待1.Linux线程概念1.1 什么是线程在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”。一切进程至少都有一个执行线程。线程在进程内部运行,本质是在进程地址空间内运行。在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化。透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合

2022-03-12 14:01:52 582

原创 leetcode.99 恢复二叉搜索树(Medium)

题目描述:题目分析:二叉搜索树的其中一个特点就是中序遍历出来的序列是有序的,如果在二叉搜索树中出现了错误的结点,那么在中序遍历中一眼就可以看到。所以解决问题的策略就是在中序遍历中解决问题。既然题目说有两个结点的值发生了交换,那么我们就要找出这两个结点并记录下来,最后再交换这两个结点的值。于是我们要定义两个指针用于记录发生交换的指针,另外还需要一个指针记录上一个结点用于与目前遍历的结点进行比较。题目代码:...

2022-03-05 16:18:11 182

原创 leetcode.22 括号生成(Medium)

2022-01-12 22:27:10 177

原创 leetcode.37 解数独(Hard)

2022-01-12 21:58:32 151

原创 leetcode.239 滑动窗口最大值(Hard)

题目分析详见注释

2022-01-11 11:24:38 173

原创 leetcode.496 下一个更大元素(Medium)

进阶:你可以设计一个时间复杂度为 O(nums1.length + nums2.length) 的解决方案吗?利用单调栈和哈希表解决问题:

2022-01-08 15:00:52 148

原创 leetcode.297 二叉树的序列化与反序列化(Hard)

这一题的难点在于,怎样解决节点值为两位及两位以上的值的序列化和反序列化问题,不能单单的直接将 root->val + ‘0’ 和 data[i] - ‘0’ ,例如 -13 + ‘0’ 是65而不是13,所以在序列化时要对其每个值用分隔符进行分隔,将值序列化采用to_string,反序列化采用stoi,反序列化时根据分隔符的划分,取到分隔符之间的字符串就是这个结点的值。...

2022-01-08 14:00:44 57

原创 leetcode.222 完全二叉树的结点个数(Medium)

分析:如果像普通二叉树一样的递归遍历,时间复杂度是O(N),如果还要降低时间复杂度,可以先判断该树是不是满二叉树,如果是满二叉树,直接通过公式计算其节点个数,如果不是满二叉树,在进行普通递归。这样可以把时间复杂度降到O(logN*logN)。...

2022-01-08 12:18:54 186

原创 leetcode.450 删除搜索二叉树中的结点(Medium)

删除搜索二叉树中的结点迭代法:

2022-01-08 11:00:17 157

原创 leetcode.98 验证二叉搜索树(Medium)

单单简单靠root的左结点值小于root的值,root的右结点值大于root的值是不够的,二叉搜索树的定义是root的值要大于左树所有的值,小于右树所有的值。所以在递归的时候要明确区间,当左树的值应该都要小于root的值,就可以把root的值当作左子树恰好不能容忍的值,当左子树的值大于等于root的值,那么就不是BST;反之在右子树,右子树的值应该都要大于root的值,所以把root的值当作右子树恰好不能容忍的值。...

2022-01-07 22:00:51 139

原创 leetcode.198 打家劫舍I,II,III(Medium)

动态规划分析:一、dp数组的定义:dp[i] 表示从第i间房间开始选择,能得到的最多金钱数。二、base case:dp[n] = 0, 因为不存在这样一个房间。三、状态转移:到了这一间房间,要么选择,要么不选。如果选择了,那么就得拿走这间房间的然后前往下一家相隔的房间。四、我们要的结果就是dp[0],从第0个房间开始选择。...

2022-01-06 19:57:15 145

原创 leetcode.416 分割等和子集(Medium)

动态规划分析:这是一个子集背包问题。想要知道有没有两个相等的子集,可以把问题分割成有没有一个子集的和等于整个数组和的一半。所以这样就可以转化成一个背包问题。一、对dp数组进行定义:对于前i个数,是否存在子集的和等于j,如果存在,那么dp[i][j] = true,如果不存在,dp[i][j] = false。二、base case:当i为0时,没有数给我们做子集,这时不可能凑出j。当j为0时,任何时候都满足,因为任何时候背包都是空的。三、状态转移方程:对于dp[i][j] 有两种选择,一种是放,一.

2022-01-06 18:23:08 59

原创 leetcode.312 戳气球(Hard)

动态规划分析:首先可以将这个问题分解成最大硬币数 = 戳破最后一个气球得到的硬币数+戳破所有该气球左边的所有气球得到的所有硬币数+戳破所有该气球右边的所有气球得到的所有硬币数。题目中说可以将超过数组边界的气球看作是一个硬币的气球。所以我们可以模拟出一个新的数组,新数组比原数组长2,将数组的开头和末尾都存上1。一、dp[i][j] 的含义:戳破i 与 j之间的所有气球所得到的最多硬币数。那么题目中要求的结果就是dp[0][n+1]。二、base case:当 i == j 或 i+1 == j时,中.

2022-01-06 14:28:47 131

原创 leetcode.887 鸡蛋掉落(Hard)

2022-01-06 13:16:50 452

原创 leetcode.10 正则表达式匹配(Hard)

动态规划分析:针对与正则匹配的问题,无非就是用双指针进行逐个匹配,如果通配符的指针走到结尾,而匹配串的指针也走到结尾了,代表匹配成功了。而如果匹配串的指针先走完了,这时要看通配符剩下的是不是x* y* z* 的这种情况,因为x* y* z* 可以匹配空字符。要想一一开始匹配,首先需要一个dp函数。代码逻辑:首先从一个字符的位置开始匹配,用i代表匹配串的要匹配的字符的下标,j表示通配符串的要匹配的字符的下标。s表示匹配串,p代表通配串。一、当s[i] == s[j] 或者 p[j] == ‘.’ 时,.

2022-01-06 10:36:15 110

原创 leetcode.1312 让字符串成为回文串的最小插入次数(Hard)

动态规划分析:一、dp数组的含义:dp[i][j] 的含义是从字符串的 s[i … j]成为回文串的最小插入次数。二、base case :单个字符构成的字符串本来就是回文串,所以最小的插入次数是0。三、状态转移方程:当s[i] == s[j] 时,左右对应刚好满足回文,这时 dp[i][j] = dp[i+1][j-1] +2 。如果不相等,那么最小的插入次数应该是分别只插入一个字符时的次数加上一(从左插入和从右插入,对应的分别是i 和 j),然后取它们中的最小值作为最小的插入次数。四、我们要的.

2022-01-05 21:53:20 135

原创 leetcode.516 最长回文子序列(Medium)

动态规划分析:一、dp数组的定义:dp[i][j]表示从字符串下标的i - j的子串的最长回文子序列的长度。二、base case : 单独字符的最长回文子序列的长度都是1。在dp数组中 i>j 是不合理的。三、状态转移方程:如果字符串s 的 s[i] == s[j] ,那么最长的回文子序列的长度就dp[i][j]就是 dp[i+1][j-1] +2。如果不是相等的,那么 dp[i][j] 就是 dp[i+1][j] 和 dp[i][j-1] 中大的那个。四、我们要的结果就是 dp[0][s.

2022-01-05 21:38:36 61

原创 leetcode.72 编辑距离(Hard)

动态规划分析问题:一、确定dp数组的含义:dp[i][j] 是 words1 从0-i的子串与words2 从0-j 的子串的最小编辑距离。二、base case :空串变成任何的字符串最小需要字符串长度的次数。任何的字符串变成空串最少也要字符串长度的次数。(全部插入和全部被删除)三、状态转移方程:如果两个字符串的末尾两个字符相等,那么等于删去这个相等的字符之后剩下的串的最小编辑距离。如果不相等,那么最小的编辑次数是从增加、删除、替换中最小的那个加一。通过dp数组得知,dp数据向右表示增加,向下表.

2022-01-05 21:25:52 271

原创 leetcode.1143 最长公共子序列(Medium)

动态规划的思路:只要涉及子序列的问题,十有八九要用动态规划来解决。一、要明确dp数组的含义。因为有两个字符串,所以需要一个二维数组。dp[i][j] 的含义就是字符串1的下标为0到i的子串与字符串2的下标为0-j的字串的最长公共子序列的长度。二、就是要确定好base case。空串与任何串的公共子序列的长度都是0。三、找状态转移方程。我们知道,如果在字符串1与字符串2的末尾都加上一个相同的字符,那么它们的最长公共子序列的长度就会增加1。如果加上的字符不相同,那么dp[i][j] 的值应该是某些值的一.

2022-01-05 20:58:16 210

原创 leetcode.53最大子数组和(Easy)

2022-01-05 20:39:43 231

原创 leetcode.5 最长回文子串(Medium)

2022-01-04 21:54:48 214

原创 leetcode.300 最长递增子序列

解法一:经典动态规划解法二:二分法

2021-12-20 21:40:47 59

原创 剑指.38 字符串的排列

解法同 leetcode 46 47

2021-12-14 19:12:05 48

原创 leetcode.3无重复字符的最长子串

2021-12-14 18:38:01 82

原创 leetcode.438 找到字符串中所有字母异位词

2021-12-14 18:20:57 166

原创 leetcode.567 字符串的排列

2021-12-14 18:11:21 51

原创 leetcode.76 最小覆盖字串

2021-12-14 17:47:40 46

原创 leetcode.142 环形链表II

2021-12-14 16:26:06 298

原创 leetcode.752 打开转盘锁

version1version2

2021-12-13 17:57:30 154

原创 leetcode.111 二叉树最小深度(深度优先与广度优先)

深度优先(DFS):广度优先(BFS):BFS空间复杂度较高,DFS空间复杂度较低。它们最坏的时间复杂度相同都是O(N),但在本题在纵向上找最小高度,BFS是比DFS高效的。

2021-12-13 14:24:59 58

原创 leetcode.51 N皇后

最基本回溯解法:

2021-12-13 13:38:22 138

原创 leetcode.46、47 全排列

2021-12-13 12:18:53 136

原创 leetcode.322、518 零钱兑换、零钱兑换II

动态规划:动态规划:对上述动态规划进行压缩:

2021-12-12 18:34:00 123

原创 leetcode.124 二叉树中的最大路径和 C++解法

2021-12-12 17:15:25 455

原创 剑指.36二叉搜索树与双向链表

2021-12-12 15:53:38 38

原创 leetcode.105、106 从前序与中序遍历序列构造二叉树与从中序与后序遍历序列构造二叉树

从前序与中序遍历序列构造二叉树从中序与后序遍历序列构造二叉树

2021-12-12 15:50:07 36

原创 leetcode.144、94、145 二叉树前、中、后序的非递归遍历 C++解法

非递归前序遍历非递归中序遍历非递归后序遍历

2021-12-12 14:03:30 386

原创 leetcode.107 二叉树的层序遍历II C++解法

题目分析:该题和一般的层序遍历不一样的是需要分清每一层的数据并将每一层的数据分别存到一个vector中,所以需要一个参数levelSize来控制每一层数据的个数。用队列来保存结点,对每层的数据处理levelSize次就可以很好地解决这个问题。最后再逆置以下数组就可以了。解法:...

2021-12-12 12:44:43 505

原创 leetcode.236 二叉树的公共祖先 C++解法

题目分析:如果该题的二叉树是三叉链的形式很好解决,只需要沿着parent往上找即可,保存下路径,最后找公共结点。如果这题的二叉树是二叉搜索树,很容易通过二叉搜索树的性质找到该节点,顺便保存路径,找到公共结点。如果是普通二叉树,如果查找的两个结点一个在当前节点的左树一个在右树,说明该节点是公共节点;如果是都在当前节点的左边,则递归到该节点的左子树中查找;如果都是在当前节点的右边,则低轨道该结点的右子树中去查找。解法一:左右查找法(时间复杂度O(N2))解法二:用栈保存路径(时间复杂度O(N)).

2021-12-12 12:03:03 427

原创 leetcode.95 不同的二叉搜索树II C++解法

题目描述:解法:递归展开图:

2021-12-10 13:02:49 194

空空如也

空空如也

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

TA关注的人

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