自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GET和POST请求的区别

GET /562f25980001b1b106000338.jpg HTTP/1.1Host:img.mukewang.comUser-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36Accept:image/webp,image/*,*/*;q=0.8Referer:http://www.imooc.com/Ac.

2021-05-31 14:42:19 361

原创 WEB中的静态资源和动态资源

1.静态资源和动态资源的概念简单来说:静态资源:一般客户端发送请求到web服务器,web服务器从内存在取到相应的文件,返回给客户端,客户端解析并渲染显示出来。动态资源:一般客户端请求的动态资源,先将请求交于web容器,web容器连接数据库,数据库处理数据之后,将内容交给web服务器,web服务器返回给客户端解析渲染处理。2.静态资源和动态资源的区别a.静态资源一般都是设计好的html页面,而动态资源依靠设计好的程序来实现按照需求的动态响应;b.静态资源的交互性差,动态资源可以根据需求

2021-05-31 14:25:37 673

原创 无符号数取反

做Leetcode剑指offer第16题数值的整数次方问题时,解答如下:class Solution {public: double myPow(double x, int n) { double res = 1; unsigned int m =(unsigned int)n; if(n < 0) { x = 1/x; m = -m; }

2021-05-27 12:38:53 3695

原创 g++编译显示‘undefined reference to“

解决:在http_conn.cpp里加入如下代码int http_conn::m_epollfd;int http_conn::m_user_count;编译成功。

2021-05-25 20:31:40 986

原创 IP地址

2021-05-24 14:12:50 85

原创 腾讯实习面试

2021.5.211、char、short、int占几个字节?char范围?int:4个字节、short:2个字节、char:1个字节、char*:8个字节、long:8个字节、double:8个字节、float:4个字节;char范围:-128~127(-2^7~2^7)int范围:-2^31~2^31;2、C++中static关键字static常用的两个作用,一个是作用域限制,一个是生存期限制。对函数来说:作用域限制:被static修饰的函数,只能用于代码本身文件的调用。

2021-05-23 15:05:39 203

原创 静态成员函数和静态成员变量

一、问题引入 《Linux高性能服务器编程》 p301 代码清单15-3 半同步/半反应堆线程池实现 在函数threadpool<T>:threadpool中创建线程时函数的调用为pthread_create(m_threads+i,NULL,worker,this)书中对此的解释是在C++程序中使用pthread_create函数时,该函数的第三个参数必须指向一个静态函数。而要在一个静态成员中使用类的动态成员(包括成员函数和成员变量),则只能通过如下两种方式...

2021-05-19 20:55:24 836 1

原创 “progtam received signal SIGABRT,Aborted.“错误

《Linux高性能服务器编程》 p255 代码清单13-4 使用共享内存的聊天室服务器程序gdb调试到代码207行(ret = bind(listenfd,(struct sockaddr*)&address),sizeof(address);assert(ret !=-1);)显示"progtam received signal SIGABRT,Aborted."程序退出调试。原因尚未找到。通过将端口号由12345改为22222解决了该错误。之前用过12345端口运行过该程序,且成功没有报错.

2021-05-19 20:24:09 3749 1

原创 #define、#undef、#ifdef、#ifndef、#if、#elif、#else、#endif、defined

#define 定义一个预处理宏#undef 取消宏的定义#if 编译预处理中的条件命令,相当于C语法中的if语句#ifdef 判断某个宏是否被定义,若已定义,执行随后的语句#ifndef 与#ifdef相反,判断某个宏是否未被定义#elif 若#if, #ifdef, #ifndef或前面的#elif条件不满足,则执行#elif之后的语句,...

2021-04-01 15:25:47 219

原创 Lamda表达式

ISO C++ 11引入了Lamda表达式。基本语法如下:[capture list] (parameter list) -> return type { function body }其中除了“[ ]”(其中捕获列表可以为空)和“复合语句”(相当于具名函数定义的函数体),其它都是可选的。它的类型是单一的具有成员operator()的非联合的类类型,称为闭包类型(closure type)。C++中,一个lambda表达式表示一个可调用的代码单元。我们可以将其理解为一个未命名的内联函数。

2021-04-01 10:57:17 175

原创 同步、异步、阻塞和非阻塞

同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪,而异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知(异步的特点就是通知)。阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式,说白了是一种读取或者写入操作函数的实现方式,阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值。一般来说I/O模型可以分为:同步阻塞...

2021-03-25 17:03:56 99

原创 基础排序算法

例题:给你一个整数数组nums,请你将该数组升序排列。n为数组大小。1、选择排序法思路:每一轮选出未排序部分的最小元素,交换到未排序部分的最开头。即先选出最小的,然后是第二小的,以此类推。复杂度分析:时间复杂度:O(N^2),这里N是数组的长度; 空间复杂度:O(1),使用到常数个临时变量。C++实现如下:class Solution {public: vector<int> sortArray(vector<int>& nums...

2021-03-25 14:22:26 136

原创 动态规划模板

状态定义:定义dp[i]ordp[i][j],确定dp数组代表的意义;转移方程:根据dp数组意义,确定状态转移方程,即由已知的dp[i-1]求dp[i]的过程;初始状态:确定dp数组的初始状态,一般是dp[0]ordp[0][0]ordp[0][...]等;返回值:根据最终求得的dp数组求需要的返回值;优化:有的时候可以对时间或者空间复杂度进一步优化。例题:连续子数组的最大和题目:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O

2021-03-09 19:12:48 182

原创 494. 目标和

原题链接:494. 目标和题目:给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号+和-。对于数组中的任意一个整数,你都可以从+或-中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。思路:动态规划。首先,如果我们把nums划分成两个子集A和B,分别代表分配+的数和分配-的数,那么他们和target存在如下关系:sum(A) - sum(B) = targetsum(A) = t...

2021-03-05 14:59:00 213

原创 347. 前 K 个高频元素

原题链接:347. 前 K 个高频元素题目:给定一个非空的整数数组,返回其中出现频率前k高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]提示:你可以假设给定的k总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) ,n是数组的大小。题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集...

2021-03-02 20:12:56 102

原创 841. 钥匙和房间

原题链接:841.钥匙和房间题目:有 N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:0,1,2,...,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。在形式上,对于每个房间 i 都有一个钥匙列表 rooms[i],每个钥匙 rooms[i][j] 由 [0,1,...,N-1] 中的一个整数表示,其中 N = rooms.length。 钥匙 rooms[i][j] = v 可以打开编号为 v 的房间。最初,除 0 号房间外的其余所有房间都被锁住。你可以自由地在房间

2021-02-24 17:46:27 233

原创 394. 字符串解码

原题链接:394. 字符串解码题目:给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像3a或2[4]的输入。思路:参考字符串解码(辅助栈法 / 递归法,清晰图解)...

2021-02-23 14:41:19 92

原创 133. 克隆图

原题链接:133. 克隆图题目:给你无向连通图中一个节点的引用,请你返回该图的深拷贝(克隆)。图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。class Node { public int val; public List<Node> neighbors;}思路1:DFS。C++实现如下:/*// Definition for a Node.class Node {public: int v...

2021-02-22 09:59:18 101

原创 739. 每日温度

原题链接:739. 每日温度题目:请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用0 来代替。例如,给定一个列表temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是[1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是[1, 30000]。每个气温的值的均为华氏度,都是在[30, 100]范围内的整数。思路...

2021-02-21 14:00:33 116

原创 752. 打开转盘锁

原题链接:752. 打开转盘锁题目:你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字:'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'。每个拨轮可以自由旋转:例如把'9'变为'0','0'变为'9'。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为'0000',一个代表四个拨轮的数字的字符串。列表deadends包含了一组死亡数字,一旦拨轮的数字和列表里的任何一个元素相同,这个锁将会被永久锁定,无法再被旋转。...

2021-02-20 14:19:59 108

原创 200. 岛屿数量

原题链接:岛屿数量题目:给你一个由'1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。思路:BFS算法。递归解法C++实现如下:class Solution {public: int numIslands(vector<vector<char>>& grid) { int nums = 0; .

2021-02-20 14:16:14 163

原创 平衡二叉树

原题链接:平衡二叉树题目:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1 。思路:参考110. 平衡二叉树(从底至顶,从顶至底)。C++实现如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *righ.

2021-02-13 12:38:48 73

原创 二叉搜索树的最近公共祖先

原题链接:二叉搜索树的最近公共祖先题目:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”思路:递归。考虑两个节点的值,如果两个节点的值都是大于root的值,那么公共祖先在root的右子树中;如果两个节点的值都是小于root的值,那么公共祖先在root的左子树中;否则,说明两个节点的值一个大于root

2021-02-13 11:03:44 99

原创 701. 二叉搜索树中的插入操作

原题链接:701. 二叉搜索树中的插入操作题目:给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。思路:迭代C++实现如下:/** * Definition for a binary tree node. * struct TreeNode { * int

2021-02-09 12:37:57 111

原创 700. 二叉搜索树中的搜索

原题链接:700. 二叉搜索树中的搜索题目:给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,给定二叉搜索树: 4 / \ 2 7 / \ 1 3和值: 2你应该返回如下子树: 2 / \ 1 3思路1:递归C++实现如下:/** * Definit...

2021-02-09 12:24:50 75

原创 173. 二叉搜索树迭代器

原题链接:二叉搜索树迭代器题目:实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用next()将返回二叉搜索树中的下一个最小的数。示例:BSTIterator iterator = new BSTIterator(root);iterator.next(); // 返回 3iterator.next(); // 返回 7iterator.hasNext(); // 返回 trueiterator.next(); // 返回 9i...

2021-02-08 14:33:22 77

原创 98. 验证二叉搜索树

原题链接:98. 验证二叉搜索树题目:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。思路:中序遍历二叉树得到一个序列。判断这个序列是不是递增的,是的话即为二叉搜索树,否则不是。C++实现如下:/** * Definition for a binary tree node. * struct TreeNode { *

2021-02-08 12:58:43 69

原创 236. 二叉树的最近公共祖先

原题链接:236. 二叉树的最近公共祖先题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”思路:参考【C++ 经典递归】思路非常好理解 时间复杂度O(n), 空间复杂度O(n)。这里的思路是主要有三种情况:①两个结点都存在的话,则找出他们的最近公共祖先;②一个结点存在,另一个结点不存在的话,则最近公共祖先

2021-02-07 13:23:40 71

原创 116. 填充每个节点的下一个右侧节点指针

原题链接:116. 填充每个节点的下一个右侧节点指针题目:给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有next 指针都被设置为 NULL。思路:BFS层序遍历。...

2021-02-06 14:24:51 181

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

题目:根据一棵树的中序遍历与后序遍历构造二叉树。思路:递归法。C++实现如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x)

2021-02-06 14:22:39 72

原创 112. 路径总和

原题链接:路径总和题目:给你二叉树的根节点root 和一个表示目标和的整数targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和targetSum 。叶子节点 是指没有子节点的节点。思路1:递归C++实现:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNo...

2021-02-05 14:31:28 103

原创 101. 对称二叉树

原题链接:对称二叉树题目:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2/ \ / \3 4 4 3但是下面这个[1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3思路1:递归C++实现:/** * Definition for a binary tree node. ...

2021-02-05 14:22:14 77

原创 199. 二叉树的右视图

原题链接:二叉树的右视图题目:给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入:[1,2,3,null,5,null,4]输出:[1, 3, 4]解释: 1 <---/ \2 3 <---\ \ 5 4 <---思路:采用从右至左的层序遍历,BFS,将每层读到的第一个数据保存即可。C++实现如下:/** ...

2021-02-03 14:27:06 83

原创 103. 二叉树的锯齿形层序遍历

原题链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/题目:给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层序遍历如下:[ [3], [20,9],...

2021-02-02 16:53:22 97

原创 1162. 地图分析

原题链接:地图分析题目:你现在手里有一份大小为N x N 的 网格 grid,上面的每个 单元格 都用0和1标记好了。其中0代表海洋,1代表陆地,请你找出一个海洋单元格,这个海洋单元格到离它最近的陆地单元格的距离是最大的。我们这里说的距离是「曼哈顿距离」(Manhattan Distance):(x0, y0) 和(x1, y1)这两个单元格之间的距离是|x0 - x1| + |y0 - y1|。如果网格上只有陆地或者海洋,请返回-1。思路:采用BFS算法(广...

2021-02-02 16:19:26 110

原创 岛屿问题:网络结构中的dfs

参考:LeetCode 例题精讲 | 12 岛屿问题:网格结构中的 DFS例题1:岛屿的最大面积原题链接:695. 岛屿的最大面积题目:给定一个包含了一些0和1的非空二维数组grid。一个岛屿是由一些相邻的1(代表土地) 构成的组合,这里的「相邻」要求两个1必须在水平或者竖直方向上相邻。你可以假设grid的四个边缘都被0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)C++实现如下:class Solut...

2021-02-01 19:15:18 153

原创 102. 二叉树的层序遍历

原题链接:二叉树的层序遍历题目:给你一个二叉树,请你返回其按层序遍历得到的节点值。 (即逐层地,从左到右访问所有节点)。思路:广度优先遍历(BFS)。参考: BFS 的使用场景总结:层序遍历、最短路径问题C++实现如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * Tr..

2021-01-31 10:30:35 88

原创 144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历

题目:实现二叉树的前序遍历、中序遍历和后序遍历。前序遍历:首先访问根结点,然后遍历左子树,最后遍历右子树(根->左->右)。中序遍历:首先遍历左子树,然后访问根节点,最后遍历右子树(左->根->右)。后序遍历:首先遍历左子树,然后遍历右子树,最后访问根节点(左->右->根)。解法1:递归C++实现如下:前序遍历/** * Definition for a binary tree node. * struct TreeNode { *

2021-01-30 16:20:43 386

原创 82.删除排序链表中重复元素Ⅱ

原题链接:删除链表中的重复元素题目:给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。示例1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例2:输入: 1->1->1->2->3输出: 2->3思路:采用三个指针。slow指针指向第一个重复节点,fast指向最后一个重复节点,temp指向第一个重复节点的前一个节点。如果fast节...

2021-01-28 14:59:23 116

原创 24.两两交换链表中的节点

原题链接:两两交换链表中的节点题目:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]提示:链表中节点的数目在范围 [0, 100] 内0 <= Node.val <= 100思路:采用三指针法。slow和fast分别指向需要交.

2021-01-28 14:19:23 166 1

空空如也

空空如也

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

TA关注的人

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