- 博客(14)
- 收藏
- 关注
原创 TCP有限状态机
TCP有限状态机CLOSED:表示初始状态LISTEN:表示服务器端的某个socket处于监听状态,可以接受连接SYN_SENT:在服务器监听后,客户端socket执行CONNECT连接时,客户端发送SYN报文,此时客户端就进入SYN_SENT状态,等待服务器确认SYN_RCVD:表示服务器收到了SYN报文,这个状态是服务器端的socket在建立TCP连接时的3次握手时的一个中间状态,即服务器收到客户端第三次握手的ACK之前的状态,服务器进入SYN_RCVD状态ESTABLISHED:连接已建
2021-02-22 15:09:13
208
原创 Traits编程技法
Traits编程技法——STL源码剖析根据《C++ primer》16.2 我们知道,编译器无法推断函数返回值的模板实参的类型:template<typename T1,typename T2,typename T3>T1 sum(T2,T3);对于上面的例子,编译器无法推断T1的类型,必须提供一个显式模板实参,例如:auto val=sum<int>(1,2);但是,这时候必须由用户显式提供,否则就需要用其他方法。迭代器所指对象的型别(类型),称为迭代器的valu
2021-02-01 18:31:27
419
原创 64. 最小路径和
64. 最小路径和题目描述给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。**说明:**每次只能向下或者向右移动一步。示例输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。题解本题采用动态规划的方法,设置dp[i][j]表示从左上角的点出发到点(i,j)路径上最小的和,由于题目规定每次只能向下或者向右移动一步,所以dp[i][j]就只与它上面和它
2020-11-21 13:40:12
111
原创 968. 监控二叉树
968. 监控二叉树题目描述给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。示例示例 1:输入:[0,0,null,0,0]输出:1解释:如图所示,一台摄像头足以监控所有节点。题解所有节点都有以下三种状态:等待被摄像头监控,不妨设为状态0已被监控,不妨设为状态1安装了摄像头,不妨设为状态2然后进行dfs代码//c++//运行时间:12ms,在所有 C++ 提交中击败了9
2020-11-21 13:39:41
74
原创 416. 分割等和子集
416. 分割等和子集题目描述给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集.题解本题和0-1背包问题的思想差不多,但是也有一些区别,本题在初始化的时候是
2020-11-21 13:38:59
95
原创 343. 整数拆分
343. 整数拆分题目描述给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。题解采用动态规划求解,创建数组dp,dp[i]表示正整数i拆分后可得的最大乘积。对于正整数i,当i>=2时,可以进行拆分,假设拆为j和i-j,而i-j可以进行拆分,也可以不进行拆分,
2020-11-21 13:38:12
69
原创 538. 把二叉搜索树转换为累加树
538. 把二叉搜索树转换为累加树题目描述给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。示例输入: 原始二叉搜索树: 5 / \ 2 13输出: 转换为累加树: 18 / \ 20 13题解用反向的中序遍历
2020-11-21 13:37:42
51
原创 417. 太平洋大西洋水流问题
417. 太平洋大西洋水流问题题目描述给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度。“太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界。规定水流只能按照上、下、左、右四个方向流动,且只能从高到低或者在同等高度上流动。请找出那些水流既可以流动到“太平洋”,又能流动到“大西洋”的陆地单元的坐标。提示:输出坐标的顺序不重要m 和 n 都小于150示例给定下面的 5x5 矩阵: 太平洋 ~ ~ ~ ~ ~ ~
2020-11-21 13:36:45
205
原创 130. 被围绕的区域
130. 被围绕的区域题目给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。示例X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X题解矩阵中的字符包含三种类型:X被X包围的O,要转换为X没有被包围的O可以在矩阵的最外层一圈进行dfs(O),这样它肯定是没有被包围的,并标记一下,比如转换为A
2020-11-21 13:36:16
100
原创 78.子集
78.子集题目描述给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。题解这类题的通用解法就是回溯,回溯算法的通用解法:res=[]def backtrack(nums,start,path)//(选择列表,选择开始位置,选择的路径) if 满足结束条件: res.add(path) return for 选择 in 选择列表 选择 backtrack(nums,start+1,
2020-11-21 13:35:10
81
原创 90. 子集 II
90. 子集 II题目描述给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。题解本题和子集这道题基本一样,只是会多加两步,排序和判断当前节点与前一个节点是否相等。代码class Solution { List<List<Integer>>res=new ArrayList<>(); public List<List<Integer>> subsetsWithD
2020-11-21 13:34:01
67
原创 529. 扫雷游戏
529. 扫雷游戏题目描述让我们一起来玩扫雷游戏!给定一个代表游戏板的二维字符矩阵。 ‘M’ 代表一个未挖出的地雷,‘E’ 代表一个未挖出的空方块,‘B’ 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方块,数字(‘1’ 到 ‘8’)表示有多少地雷与这块已挖出的方块相邻,‘X’ 则表示一个已挖出的地雷。现在给出在所有未挖出的方块中(‘M’或者’E’)的下一个点击位置(行和列索引),根据以下规则,返回相应位置被点击后对应的面板:如果一个地雷(‘M’)被挖出,游戏就结束了- 把它改
2020-11-21 13:32:04
195
原创 LeetCode130-被围绕的区域
130. 被围绕的区域题目给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。示例X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X题解矩阵中的字符包含三种类型:X被X包围的O,要转换为X没有被包围的O可以在矩阵的最外层一圈进行dfs(O),这样它肯定是没有被包围的,并标记一下,比如转换为A
2020-09-21 16:05:28
167
原创 450. 删除二叉搜索树中的节点
题目描述给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。说明: 要求算法时间复杂度为 O(h),h 为树的高度。题解删除二叉树的节点, 如果root为空,直接return nullptr:否则,如果root->val=key,那么分为四种情况:root->left=null&
2020-09-18 14:15:14
133
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人