自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 刷题中遇到的c++中小的知识点(不断更新)

1.判断变量类型//头文件#include<typeinfo>//输出变量i的类型cout<<typeid(i).name()<<endl;

2020-03-31 13:15:08 147

原创 leetcode 783 二叉搜索树节点最小距离

给定一个二叉搜索树的根节点 root,返回树中任意两节点的差的最小值。使用中序遍历,将所有节点的值存在一个数组里,然后在数组中进行查找即可。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL)

2020-07-11 13:12:44 153

原创 leetcode111二叉树的最小深度 112路经总和

给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度 2.思路:计算出从根节点到每个叶子节点的深度,通过比较维护min的值。当前节点的最小节点为:min(左孩子最小深度, 右孩子最小深度)+1注意:当左孩子或者右孩子不存在时的特殊情况。/** *

2020-06-10 13:55:12 151

原创 leetcode107,二叉树的层序遍历

给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其自底向上的层次遍历为:[[15,7],[9,20],[3]]求出二叉树的深度,由此来初始化vector。使用queue先求出自顶向下的层序遍历,最后用reverse反转。注意,queue和stack没有迭代器。/** * Definition for a b

2020-06-10 08:28:25 151

原创 字符串常量所在的区

参考1参考2参考3参考4//main.cpp #include <iostream>using namespace std;int a = 0; //全局初始化区 char *p1; //全局未初始化区 void main() { int b; //栈 char s[] = "abc"; //栈 char *p2; //栈 char *p3 = "12

2020-05-27 16:55:42 157

原创 操作符重载为成员函数、非成员函数、友元函数的区别

操作符重载为成员函数、非成员函数与友元函数的区别:将二元操作符重载为成员函数时,两个参数(即操作数)就不再是对等,第一个参数成为了调用对象,第二个参数成为真正的参数。将二元操作符重载为非成员函数时,两边参数可以互换,但效率没重载为成员函数时的高,而且函数内不能直接读取private成员。重载为友元函数的话,既可直接访问private成员,也可以互换参数...

2020-05-24 12:57:44 615

原创 c++ 图的深度优先搜索与广度优先搜索(基于邻接矩阵)

深度优先:使用栈广度优先:使用队列#include<iostream>#include<stack>#include<queue>#define MAX_VERTS 20using namespace std;class Vertex{public: Vertex(char lab) { Label = lab; wasVisited = false; } bool wasVisited; char Label;//priva

2020-05-22 11:08:45 395

原创 c++图的邻接矩阵与邻接表

#include<iostream>#define MAX_VERTS 20using namespace std;class Vertex{public: Vertex(char lab) { Label = lab; }private: char Label;};class Graph //邻接矩阵{public: Graph(); ~Graph(); void addVertex(char lab); void addEdge(int start, i

2020-05-21 18:02:41 273

原创 用c++实现最大堆(插入、删除、读取堆顶元素)

用数组来实现堆,数组序号为0的元素即为堆顶。插入:将数据放到数组的最后,然后向上渗透。删除堆顶:将数组最后一个元素替换堆顶,然后向下渗透。头文件MaxHeap.h#ifndef _MAX_HEAP_#define _MAX_HEAP_template <class T>class MaxHeap{public: MaxHeap(int mx = 10); //默认堆的最大值为10 virtual ~MaxHeap(); bool IsEmpty(); //判断堆是否为

2020-05-21 16:24:41 1291

原创 乾颐堂现任明教教主(2014年课程)TCPIP协议详解卷一 第十节课笔记

拥塞举例:当发送方收到三个连续相等的ACK时,发送方就会进行重传。超时重传:开始使用慢启动,如果发生超时,门限值设为CWND的一半,cwnd从1开始。门限以下使用慢启动,超过门限使用拥塞避免算法。收到重复确认:三个一样的ACK后使用快速重传和快速恢复算法。收到连续3个相同的ACK之后,门限值会设为当前CWND的一半,CWND会变为当前CWND的一半加上三个报文段的大小,之后收到一个ack,cwnd加1,收到新数据确认的时候,CWND会置为门限值加上一个报文段的大小。后续由于cwnd超过了门限

2020-05-12 14:40:51 256

原创 乾颐堂现任明教教主(2014年课程)TCPIP协议详解卷一 第九节课笔记

UDP:TFTP停止等待协议,发一个512字节的块,等待确认,确认后再发512字节的块。。。。。很慢TCP:FTP隔一个报文段确认:收到报文段后不会立即确认,会等一会(200ms)。TFTP:TCP不容易抓到一摸一样的数据FTP:UDP容易抓到一摸一样的数据。TCP发的数据不能超过接收方的窗口(缓存)接收方窗口为0:接收方缓存的里的数据没有被应用层拿走。发起方收到窗口为0时就不能再发了。当接收方缓存中的数据被读走了之后,会向发送方发送一个窗口更新的通告。MSS跟MTU的关系: MSS = M

2020-05-12 14:19:18 239

原创 乾颐堂现任明教教主(2014年课程)TCPIP协议详解卷一 第八节课笔记

连接建立时的超时:第一次超时时间不太准,后续的超时时间很准。MSL:一个方向上的数据存活最长时间原因:发送端发给服务器的最后一个ACK有可能丢掉,所以客户端要再等一段时间,等待服务器重传FIN。2MSL时间内,源目IP和源目端口不能被其他会话使用。一般服务器都是被动关闭。如果客户端长时间没有收到FIN,那么ASA就会发给客户端以客置位TCP,释放客户端资源。复位报文段:如果TCP请求连接一个不存在的端口,那么会收到一个RST信息。如果UDP请求连接一个不存在的端口,那么会受到一个端口不可达I

2020-05-11 23:10:58 235

原创 乾颐堂现任明教教主(2014年课程)TCPIP协议详解卷一 第七节课笔记

三次握手建立,四次握手结束**面向连接:**TCP是点对点的,连接两端的应用,通过源端口号和目的端口号。为什么TCP收到数据后会等一会再发送一个确认:立刻发送会浪费资源,等一会是因为如果过一会还要传过去数据,就会把确认信息和数据一起传过去,资源利用率高。TCP校验和包含TCP伪首部,TCP首部,TCP数据。TCP的字节流TCP是用IP传输的,IP传输不靠谱,TCP会再接收端进行重新排序。TCP首部长度最长为60个字节。16位窗口大小表示接收端可用缓存还剩多少。为什么会有两个序列号:TC

2020-05-11 22:50:05 220

原创 乾颐堂现任明教教主(2014年课程)TCPIP协议详解卷一 第六节课笔记

ICMP源站抑制发送太快,路由器的接收缓存已经满了,路由器会向源会送一个ICMP源站抑制差错(类型,code)。广播与组播TCP一定是点对点的,单播。二层广播,不能跨路由器的,例如ARP,目的MAC地址是全1的。三层广播是可以跨路由器的。组播属于单播和广播之间,接收者属于网络里的个别主机。组播比广播效率高:1,组播只是特定的主机才会收到。2,从系统对包的处理角度分析,组播到了设备驱动程序层就可以过滤的,广播还要往上(到传输层,判断目的端口)。Smurf攻击多播的MAC地址和多播的IP地

2020-05-11 22:18:32 249

原创 乾颐堂现任明教教主(2014年课程)TCPIP协议详解卷一 第五节课笔记

只有UDP有广播和多播,TCP无UDP:面向数据报的协议。无论应用层给UDP多大数据,直接封装UDP头部,然后交给IP封装IP头部。一个网络操作一个数据包。TCP:面向数据流的协议。如果应用层给TCP数据很大,TCP会把它拆成很小的数据,如果应用层给TCP的数据很小,TCP会重组几个很小的数据一起发出去。所以传输过程中UDP更容易制造分片。IP首部校验和,ICMP校验和,UDP校验和,TCP校验和:只有IP校验和只校验IP首部,其他的分别校验首部合数据。UDP数据长度可以是奇数,但如果是奇数的话

2020-05-11 21:59:38 223

原创 乾颐堂现任明教教主(2014年课程)TCPIP协议详解卷一 第四节课笔记

8位类型位,8位代码位类型是大类,类型里边用代码区分不同的小类型重要的:ping的请求:类型为8, 代码为0 (查询报文)应答:类型为0, 代码为0 (查询报文)类型3:不可达信息。(差错报文)端口不可达:UDP的规则之一是:如果收到UDP数据报而且目的端口与某个正在使用的进程不相符,那么UDP返回一个ICMP不可达报文。校验和IP校验和只管IP首部,ICMP校验和管ICMP首部和数据。C - R -S客户端C发送信息到S,在路由器的时候,有可能没有路由或者路由器有访问控制然后把包丢掉

2020-05-11 21:39:44 316

原创 Ubuntu16.04配置cuda9.0和cudnn7.3总结版

1.更换linux内核首先查看Ubuntu系统的内核,Ubuntu16.04一般都是4.15的内核,而cuda9.0不支持此版本的内核,因此需要将内核更换为4.4版本。(1)查看已安装的内核版本dpkg -l|grep linux-image(2)查看当前使用的内核,若为4.15,则需更换为4.4:uname -r(3)查看可以更换的内核sudo apt-cache search...

2020-05-10 11:21:03 163

原创 乾颐堂现任明教教主(2014年课程)TCPIP协议详解卷一 第三节课笔记

ARP映射逻辑地址到mac地址。IP地址(逻辑地址)32位,mac地址48位。网卡发数据要知道目的MAC地址,只知道IP地址无法发数据。DNS为解析器,可以将主机名解析为IP地址,主机映射文件也可以将主机名映射为IP地址。ARP解析分两种:直连和非直连。直连:直接解析目的MAC地址。非直连:解析去往目的地的下一跳路由器的网关的IP地址所对应的mac地址。多点网络需要ARP,点对点...

2020-05-08 16:57:52 395

原创 乾颐堂现任明教教主(2014年课程)TCPIP协议详解卷一 第二节课笔记

数据链路层:以太网和IEEE 802封装ppt中上边为802.3帧,下边为以太网数据帧。以太网:封装格式:CSMA/CD可以检测冲突,IP地址为32bit,MAC地址为48bitARP要补齐长度46ARP是知道IP要MACRARP是知道MAC要IPMAC称为硬件地址,IP地址称为逻辑地址根据长度和类型可以判断出802的帧还是以太网的帧普通电脑一般发的都是以太网的帧802帧数...

2020-05-08 16:04:55 469

原创 乾颐堂现任明教教主(2014年课程)TCPIP协议详解卷一 第一节课笔记

为什么要分层?如果没有分层,一个软件厂商需要设计所有的通信细节,包含物理层接口与信号编码,地址寻址,传输机制与保障。让专业的厂商做更专业的事情。(腾讯做通信软件,cisco做路由器,华为做交换机,安普做网线和水晶头)OSI参考模型准寻的几大原则:1 各层之间有清晰的边界,便于理解。2 每个层实现特定的功能,且互不影响。3 每个层既是服务者又是被服务者,即为上一层服务,又被下一层服务。...

2020-05-06 14:37:53 815

原创 剑指offer 面试题39 数组中出现次数超过一半的数字

哈希表O(n)的解法int MoreThanHalfNum(int* numbers, int length){ unordered_map<int,int> num; if (numbers == nullptr || length <= 0 ) return 0; for (int i = 0; i < length; ++i) { num[numb...

2020-05-01 16:44:39 76

原创 剑指offer 面试题38 字符串序列

用递归的方法求全排列#include<iostream>using namespace std;void Permutation(char* pStr, char* pBegin);void Permutation(char* pStr){ if (pStr == nullptr) return; Permutation(pStr, pStr);}void ...

2020-04-30 22:02:36 62

原创 剑指offer 面试题37 序列化二叉树

bool ReadStream(istream& stream, int* number){ if (stream.eof()) return false; char buffer[32]; buffer[0] = '\0'; char ch; stream >> ch; int i = 0; while (!stream.eof() &&amp...

2020-04-30 18:15:04 84

原创 剑指offer 面试题36 二叉搜索树转为双向链表

中序遍历二叉树当前节点的左子节点指向 前一节点当前节点的右子节点指向 后一节点#include<iostream>using namespace std;struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};void ConvertNod...

2020-04-30 17:48:32 60

原创 剑指offer 面试题35 复杂链表的复制

使用分治的方法,将整个过程分为三步:第一步:将链表中的每一个节点N的后面插入一个与N相同的节点N’第二步:将N’与N‘的m_pSibling 链接即(N’->m_pSibling = N->m_pSibling->m_pNext )第三步:将整个链表拆为两个部分struct ComplexListNode{ int m_nValue; ComplexListNo...

2020-04-30 14:13:03 61

原创 剑指offer 面试题34 二叉树中和为某一值的路径 以及leetcode437

此题的大框架是使用先序遍历算法类似于栈的过程使用了递归,递归本身的过程类似于栈。最后的pop是因为如果当前节点不是路径中的点或者路径已经找到,要把该节点弹出。#include<iostream>#include<vector>using namespace std;struct BinaryTreeNode{ int m_nValue; BinaryT...

2020-04-28 16:40:21 104

原创 剑指offer 面试题33 二叉搜索树的后序遍历序列

使用递归根据根节点找出左右子树#include<iostream>using namespace std;bool VerifySquenceOfBST(int sequence[], int length){ if (sequence == nullptr || length <= 0) return false; int root = sequence[...

2020-04-28 16:06:49 57

原创 剑指offer 面试题32 层序遍历二叉树、分行打印二叉树、之字形打印二叉树

层序遍历二叉树,使用队列分行打印二叉树,使用队列之字形打印二叉树,使用两个栈#include<iostream>#include<deque>#include<stack>using namespace std;struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; ...

2020-04-28 15:48:57 136

原创 剑指offer 面试题31 栈的压入、弹出序列

#include<iostream>#include<stack>using namespace std;bool IsPopOrder(const int* pPush, const int* pPop, int nLength){ const int* pNextPush = pPush; const int* pNextPop = pPop; bool...

2020-04-27 17:59:00 66

原创 剑指offer 面试题29 顺时针打印矩阵

#include<iostream>using namespace std;void printNumber(int number);void PrintMatrixInCircle(int** numbers,int columns,int rows, int start);void PrintMatrixClockwisely(int** numbers, int co...

2020-04-26 21:36:47 60

原创 剑指offer 面试题28 对称的二叉树

因为存在二叉树节点的值全部相同的情况,所以要把nullptr考虑进去#include<iostream>using namespace std;struct BinaryTreeNode{ double m_dbValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};bool isSymmetrica...

2020-04-26 11:51:22 70

原创 面试题27 二叉树的镜像

前序遍历二叉树,交换每一个节点的左右节点(非叶子节点)。void MirrorRecursively(BinaryTreeNode* pNode){ if (pNode == nullptr) return; if (pNode->m_pLeft == nullptr && pNode->m_pRight == nullptr) return; Bin...

2020-04-26 11:48:59 61

原创 剑指offer 面试题26 树的子结构

#include<iostream>using namespace std;struct BinaryTreeNode{ double m_dbValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};bool DoesTree1HasTree2(BinaryTreeNode* pRoot1, Binary...

2020-04-25 17:15:16 69

原创 剑指offer 面试题25 合并两个排序链表

#include<iostream>using namespace std;struct ListNode{ int m_nValue; ListNode* m_pNext;};ListNode* Merge(ListNode* pHead1, ListNode* pHead2){ if (pHead1 == nullptr) return pHead2;...

2020-04-25 15:59:32 57

原创 剑指offer 面试题24 反转链表

需要记录三个节点:当前节点,当前节点的前一个节点,当前节点的后一个节点。 测试时注意空链表和链表中只有一个节点的情况。#include<iostream>using namespace std;struct ListNode{ int m_nValue; ListNode* m_pNext;};ListNode* ReverseListNode(ListNode*...

2020-04-25 15:43:16 62

原创 剑指offer 面试题23 链表中环的入口点

算法分为两个部分,第一部分找到环中的一个节点,第二部分找到入口点。#include<iostream>using namespace std;struct ListNode{ int m_nValue; ListNode* m_pNext;};ListNode* MeetingNode(ListNode* pHead){ if (pHead == null...

2020-04-25 14:35:35 72

原创 剑指offer 链表中倒数第k个节点

#include<iostream>using namespace std;struct ListNode{ int m_nValue; ListNode* m_pNext;};ListNode* FindKthToTail(ListNode* pListHead, unsigned int k){ //注意代码鲁棒性 if (pListHead == nu...

2020-04-24 14:12:01 54

原创 剑指offer 面试题21 调整数组使奇数位于偶数前面

//此题解法类似于快速排序#include<iostream>using namespace std;void ReorderOddEven(int *pData, unsigned int length){ if (pData == nullptr || length == 0) return; int *pBegin = pData; int *pEnd = ...

2020-04-24 13:46:28 96

原创 剑指offer 面试题20 表示数值的字符串

#include<iostream>using namespace std;bool scanUnsignedInteger(const char** str);//扫描无符号整数bool scanInteger(const char** str); //扫描整数bool isNumeric(const char* str){ if (str == nullptr) ...

2020-04-21 16:24:57 77

原创 剑指offer 面试题18(二) 删除链表中的重复节点

#include<iostream>using namespace std;struct ListNode{ int m_nvalue; ListNode* m_pNext;};void DeleteDulplication(ListNode** pHead){ if (pHead == nullptr || *pHead == nullptr) retu...

2020-04-21 12:58:31 70

空空如也

空空如也

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

TA关注的人

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