自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(122)
  • 问答 (6)
  • 收藏
  • 关注

转载 TCP/UDP/HTTP的区别和联系

一、TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP 文本信息,然后使用TC...

2020-11-10 16:17:28 419

原创 417. 太平洋大西洋水流问题

给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度。“太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界。规定水流只能按照上、下、左、右四个方向流动,且只能从高到低或者在同等高度上流动。请找出那些水流既可以流动到“太平洋”,又能流动到“大西洋”的陆地单元的坐标。提示:输出坐标的顺序不重要m 和 n 都小于150示例:给定下面的 5x5 矩阵: 太平洋 ~ ~ ~ ~ ~ ~ 1 2 ...

2020-11-06 18:22:23 150

原创 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题目说任何边界上的'O'都不会被填充为'X',那么与边界上的‘O'直接或间接相连的'O'都不会被标记为'X',使用DFS或者BFS找边界上的‘O'相连的‘O',标记为T,然后再遍历整个矩阵,被...

2020-11-06 17:24:19 124

原创 547. 朋友圈

班上有N名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B的朋友,B 是 C的朋友,那么我们可以认为 A 也是 C的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个N * N的矩阵M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生互为朋友关系,否则为不知道。你必须输出所有学生中的已知的朋友圈总数。示例 1:输入:[[1,1,0],[1,1,0],[0,0,1]]输出:2解释:已知学生...

2020-11-06 16:17:50 83

原创 200. 岛屿数量

给你一个由'1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"]]输出:1和695差不多,695求面积(df...

2020-11-06 14:52:08 85

原创 376. 摆动序列

难度中等260收藏分享切换为英文接收动态反馈如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如,[1,7,4,9,2,5]是一个摆动序列,因为差值(6,-3,5,-7,3)是正负交替出现的。相反,[1,4,7,2,5]和[1,7,4,5,5]不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。给定一个整数序列,返回作为摆动序列的最长子序列的长...

2020-11-06 14:34:49 65

原创 695. 岛屿的最大面积

给定一个包含了一些 0 和 1 的非空二维数组grid 。一个岛屿是由一些相邻的1(代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设grid 的四个边缘都被 0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,...

2020-11-06 14:34:13 64

原创 127. 单词接龙

给定两个单词(beginWord和 endWord)和一个字典,找到从beginWord 到endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginWord 和 endWord 是非空的,且二者不相同。示例1:输入:beginWord = "hit",endWord ...

2020-11-05 18:43:05 103

原创 646. 最长数对链

给出n个数对。在每一个数对中,第一个数字总是比第二个数字小。现在,我们定义一种跟随关系,当且仅当b < c时,数对(c, d)才可以跟在(a, b)后面。我们用这种形式来构造一个数对链。给定一个数对集合,找出能够形成的最长数对链的长度。你不需要用到所有的数对,你可以以任何顺序选择其中的一些数对来构造。示例:输入:[[1,2], [2,3], [3,4]]输出:2解释:最长的数对链是 [1,2] -> [3,4]相似题目:https://blog.cs...

2020-11-04 17:02:58 150

原创 300. 最长上升子序列

给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是[2,3,7,101],它的长度是 4。/*dp[i]表示从nums[0:i]中最长上升子序列的长度,如果nums[j] < nums[i],j < i,那么dp[i] = dp[j] + 1时间复杂度O(n*n)*/class Solution {public: int lengthOfLIS(vector&l..

2020-11-04 16:31:28 58

原创 91. 解码方法

一条包含字母A-Z 的消息通过以下方式进行了编码:'A' -> 1'B' -> 2...'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。题目数据保证答案肯定是一个 32 位的整数。示例 1:输入:"12"输出:2解释:它可以解码为 "AB"(1 2)或者 "L"(12)。dp[i]表示从位置0开始长度为i的字符串中解码方法的总数,合法字母是1或者2位数,首先s[:i-1]的解码方式后加上s[i]也是合法的(s[i]!=0),对..

2020-11-04 15:23:09 155

原创 279. 完全平方数

给定正整数n,找到若干个完全平方数(比如1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.令dp[i]为组成和i的完全平方数的最小个数那么,有i-j*j+j*j=i,dp[i-j*j]+1是可能的答案dp[i]=min(dp[i-j*j])+1,j*j&...

2020-11-04 14:46:38 105

原创 343. 整数拆分

给定一个正整数n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。另dp[i]表示正整数i的最大乘积把i拆分为i-j+j=i,j<=(i-1),因为如果j大于等于i那么乘积就不是正整数了,那么(i-j)*j如果再把(i-j)也拆开,对应的乘积就是dp[i-j]*j两个取最大值class Solution {public: int inte...

2020-11-04 14:03:13 69

原创 413. 等差数列划分

如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。例如,以下数列为等差数列:1, 3, 5, 7, 97, 7, 7, 73, -1, -5, -9以下数列不是等差数列。1, 1, 2, 5, 7数组 A 包含 N 个数,且索引从0开始。数组 A 的一个子数组划分为数组 (P, Q),P 与 Q 是整数且满足 0<=P<Q<N 。如果满足以下条件,则称子数组(P, Q)为等差数组:元素 A[P], A[p + 1], ...,.

2020-11-03 22:53:19 101

原创 62. 不同路径

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向右 -> 向下2. 向右 -> 向下 -> 向右3. 向下 -> 向右 -> 向右对于第一行和第一列上的所有格子,路径数

2020-11-03 22:09:03 93

原创 64. 最小路径和

给定一个包含非负整数的 mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小因为是从左上角走到右下角,只能往下或者右走设dp[i]表示走到第i列路径和的最小值,从左到右遍历时,那么对于每一行中的列,左上角的路径和是dp[i-1],上边的路径和是dp[i],更新这一行的d...

2020-11-03 20:50:36 93

原创 213. 打家劫舍 II

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,能够偷窃到的最高金额。示例1:输入:nums = [2,3,2]输出:3解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他..

2020-11-03 19:25:02 46

原创 198. 打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。...

2020-11-03 14:29:15 52

原创 70. 爬楼梯

假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶dp[i] 表示走到第 i 个楼梯的方法数目。第 i 个楼梯可以从第 i-1 和 i-2 个楼梯再走一步到达,走到第 i 个楼梯的方法数为走到第 i-1 和第 i-2 个楼梯的方法数之和dp[i] = dp[i-1] + dp[...

2020-11-03 13:56:10 83

原创 834. 树中距离之和(hard)

树的dp,讲解:https://www.youtube.com/watch?v=gi2maECPOB0&ab_channel=M.C%E7%B1%B3%E5%BC%80%E6%9C%97%E5%9F%BA%E7%BD%97建树:0:1,21:02:0,3,4,53:24:25:2class Solution {public: vector<set<int> > tree; int N; // 计算每个节点.

2020-10-30 14:45:30 140

原创 233. 数字 1 的个数(hard)

给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。示例:输入: 13输出: 6解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 。分别计算在个十百千。。。位上1出现的次数在某个位置上如果是0,那么1出现的次数=它的高位x它的位数如果某个位置上是1,那么1出现的次数=它的高位x它的位数+它的低位数字+1如果某个位置上的数字大于1,那么1出现的次数=(它的高位数字+1)x它的位数比如说102十位是0,十位出现1的情况是10——.

2020-10-29 00:43:45 65

原创 632. 最小区间(hard)

你有k个 非递减排列 的整数列表。找到一个 最小 区间,使得k个列表中的每个列表至少有一个数包含在其中。我们定义如果b-a < d-c或者在b-a == d-c时a < c,则区间 [a,b] 比 [c,d] 小。示例 1:输入:nums = [[4,10,15,24,26], [0,9,12,20], [5,18,22,30]]输出:[20,24]解释:列表 1:[4, 10, 15, 24, 26],24 在区间 [20,24] 中。列表 2:[...

2020-10-28 21:03:03 354

原创 45. 跳跃游戏 II(hard)

对于每个当前位置而言,如果不是末尾,都是要跳到下一个位置的,每个位置上能到达的最远的右界限是不一样的。那么,在跳的过程中,在当前位置更新这个最远的右界限next,一旦next大于长度,那么就可以在当前跳到末尾,cur表示当前可以跳到的最大长度,注意在跳到cur时更新step,如果在这个过程发现有next大于长度,那么step+1,表示跳到那个位置再跳一次就可以跳到最后一个位置了否则,跳到cur位置时,令cur=next,表示下一次跳跃能到达的最远的位置class Solution {public

2020-10-28 15:20:59 81

原创 124. 二叉树中的最大路径和(hard)

理解题意:路径:从一个节点到另一个节点的路径。路径和:从一个起始节点出发的的所有路径的最大和区分:1.当前节点最大路径和计算:以当前节点为起点的所有路径和2.当前节点对上一层的贡献:只能选择当前节点的最大的一条路径作为贡献,因为路径节点不可重复对于每个当前节点,如果有左右孩子,那么访问左右孩子,叶子节点的贡献就是自身的值,父节点的最大贡献值是左右孩子贡献值中的最大值+自身的值,对于每个节点,左右孩子遍历完后,计算当前的最大路径和=当前节点的值+左子树的贡献+右子树的贡献c...

2020-10-28 12:07:02 84

原创 829. 连续整数求和(hard)

连续子序长度为1的子序和:1,2,3,4,5,6,7,8,9,10。。。。d=1连续子序长度为2的子序和:3,5,7,9,11,13,15,17,19。。。d=2连续子序长度为3的子序和:6,9,12,15,18,21,24,27,30。。。d=3观察发现,都是等差序列,如果子序长度为d,那么首项s1=1+2+..+d如果n出现在等差序列中,那么(n-s1)%d==0因此,枚举d,如果(N-s1)%d=0,计数器加1,边界条件是s1<N...

2020-10-28 10:16:02 88

原创 128. 最长连续序列(hard)

可以用哈希表或者并查集做class Solution {public: int longestConsecutive(vector<int>& nums) { //哈希表 set<int> vis; for(auto num : nums) { vis.insert(num); } int res = 0; int sum =

2020-10-28 09:46:54 60

原创 906. 超级回文数(hard)

因为R的长度是18,那么超级回文数最多不超过10^9,那两边不会超过10^5枚举,构造回文串x(<10^5),并判断x^2是否为回文串class Solution {private: string ltos(long l) { ostringstream os; os << l; string res; istringstream is(os.str()); is >>

2020-10-27 23:38:02 117

原创 564. 寻找最近的回文数(hard)

如果字符串本身是回文的,那么取中间值,+1或者-1,然后反转前缀,拼接起来进行对比一些特殊的数字,比如10001,999等特殊判断如果不是回文的,那么对于长度为奇数的串,取前缀【0,len+1】,对它进行+1或者-1或者不变,后缀由【0,len】翻转,把它们拼接,然后对比;对于长度为偶数的串,前缀为[0,len]class Solution {private: bool checkTen(string s) { if(s[0] == '1' &&amp

2020-10-27 21:55:24 115

原创 336. 回文对(hard)

字符串str是回文的情况,假设s1+s2=str,长度分别为l1,l2如果l1=l2,那么s1s2互为翻转如果l1不等于l2,那么长的那部分可以拆分为短的那个的翻转+回文串现在,对于每个字符串,枚举它的每一个前缀和后缀,判断其是不是回文,如果是,那么在剩余的字符串中找有没有它剩余部分的翻转,用哈希表存储所有字符串的翻转串class Solution { private: vector<string> reverStr; unordered_map<

2020-10-26 19:21:54 77

原创 23. 合并K个升序链表(hard)

给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6方法一:用容量为K的最小堆...

2020-10-25 12:48:13 307

原创 25. K 个一组翻转链表(hard)

给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当k= 2 时,应当返回: 2->1->4->3->5当k= 3 时,应当返回: 3->2->1->4->5每k个节点一组进行翻转,先计算总长度L,把链表分为L/k...

2020-10-25 12:48:07 75

原创 42. 接雨水(hard)

给定n个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。如果能接雨水,那么当前位置的高度一定比两边要小,记录当前位置左边和右边的最大高度,选择较小的那个,减去当前位置的高度,就是当前位置能接多少水时间O(n)空间O(n..

2020-10-25 12:47:56 167

原创 85. 最大矩形(hard)

给定一个仅包含0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例:输入:[ ["1","0","1","0","0"], ["1","0","1","1","1"], ["1","1","1","1","1"], ["1","0","0","1","0"]]输出: 6把每一层看作是柱状图,对每一行求一个高度,这个高度就是对应的连续1的长度,对每一行就柱状图的最大面积求柱状图的最大面积用单调栈,https://www.cnblogs.com/l...

2020-10-25 12:47:45 147

原创 97. 交错字符串(hard)

给定三个字符串s1、s2、s3,请你帮忙验证s3是否是由s1和s2 交错 组成的。两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串:s = s1 + s2 + ... + snt = t1 + t2 + ... + tm|n - m| <= 1交错 是 s1 + t1 + s2 + t2 + s3 + t3 + ... 或者 t1 + s1 + t2 + s2 + t3 + s3 + ...提示:a + b 意味着字符串 a 和...

2020-10-25 12:47:34 65

原创 4. 寻找两个正序数组的中位数(hard)

给定两个大小为 m 和 n 的正序(从小到大)数组nums1 和nums2。请你找出并返回这两个正序数组的中位数。进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2二分法查找两个正序排列的数组的中位数,设中位数为K,那么先在数组1找K/2位置,数组2找K/2位置,根据比较结果缩小范围class Solution...

2020-10-25 12:47:24 54

原创 1012. 至少有 1 位重复的数字(hard)

给定正整数N,返回小于等于 N且具有至少 1 位重复数字的正整数的个数。示例 1:输入:20输出:1解释:具有至少 1 位重复数字的正数(<= 20)只有 11 。转化为求都不重复的正整数的个数例如3562高位是04th3th2th1thtotal0001-99xA(9,0)001-90-99xA(9,1)01-90-90-99xA(9,2)高位不是04th3th2...

2020-10-25 12:46:58 160

原创 968. 监控二叉树(hard)

给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。输入:[0,0,null,0,0]输出:1解释:如图所示,一台摄像头足以监控所有节点。贪心+dp,贪心的情况是,叶子节点的父节点装摄像头是数量最少的,状态有三种:0,本节点无覆盖1,本节点有摄像头2。本节点有覆盖空节点的状态只能是有覆盖四类情况:1.左右节点都有覆盖(不需要相机)2.左右节点至少有一...

2020-10-25 12:46:34 73

原创 887. 鸡蛋掉落(hard)

你将获得K个鸡蛋,并可以使用一栋从1到N共有 N层楼的建筑。每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。你知道存在楼层F ,满足0 <= F <= N 任何从高于 F的楼层落下的鸡蛋都会碎,从F楼层或比它低的楼层落下的鸡蛋都不会破。每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层X扔下(满足1 <= X <= N)。你的目标是确切地知道 F 的值是多少。无论 F 的初始值如何,你确定 F 的值的最小...

2020-10-24 00:32:21 96

原创 870. 优势洗牌

给定两个大小相等的数组A和B,A 相对于 B 的优势可以用满足A[i] > B[i]的索引 i的数目来描述。返回A的任意排列,使其相对于 B的优势最大化。示例 1:输入:A = [2,7,11,15], B = [1,10,4,11]输出:[2,11,7,15]/*贪心,要使A[i]>B[i]的数目尽量多,遍历B的时候,用最小的大于B[i]的A[i]对上*/class Solution {public: vector<int&gt...

2020-10-24 00:32:01 60

原创 670. 最大交换

给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。示例 1 :输入: 2736输出: 7236解释: 交换数字2和数字7。/*将数字从大到小排序后,与原数组比较,找出第一个不一样的,交换*/class Solution { public: int maximumSwap(int num) { if(num <= 9) return num; string s = to_string(num);

2020-10-24 00:31:49 57

空空如也

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

TA关注的人

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