
复习
心怀梦想的咸鱼
这个作者很懒,什么都没留下…
展开
-
根据先序和中序求二叉树
举个例子EBADCFHGIKJ 先序(根左右)ABCDEFGHIJK中序 (左根右)我将其求二叉树的过程称为 求根方法在先序上的每个节点都是其子树的根节点(听起来是废话)先通过先序找到根节点E,在中序中可以看出,ABCD E FGHIJK,E的左边就是左子树的节点ABCD,E的右边是右子树的节点FGHIJK。再通过先序找到第二个节点B,在中序中可以看出,B的左边就是左子树的节点A,B的右边是右子树的节点CD依次类推不断的在先序中找到节点作为根节点,再从中序遍历中看到该节点的左右孩子所属原创 2020-09-25 19:49:45 · 7898 阅读 · 2 评论 -
C++new运算符
new运算符虽然用的很久,但是我实际上对它的了解仅仅局限于表面知道和malloc一样可以在堆内存中申请内存,可能会调用对象的构造函数。但是具体的实现和什么时候调用构造函数完全不了解,因此今天在这里进行梳理。1. new的常见用法int *a =new int[5];int *b =new A();在实际操作中,我们发现A的申请的空间的储存的值为随机值,new仅仅申请了一块随机空间,但是B的申请的空间的值已经初始化了,new调用了A的构造函数。new A()的功能如下在堆上申请空间在分配的空原创 2020-09-25 19:14:09 · 669 阅读 · 0 评论 -
填充每个节点的下一个右侧节点指针 II
给定一个二叉树struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。思路:通常而言,这种题目和层序遍历有分不开的关系,使用队列辅助实现,空间复杂度为O(N),完成代码如下class Solution {public: Node* connect原创 2020-09-24 11:17:36 · 245 阅读 · 0 评论 -
每日一题回溯算法
今天要写的题目是剑指 Offer 38. 字符串的排列输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = “abc”输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]万物皆可暴力,但是时间复杂度太高了,因此我们可以考虑dfs和回溯算法需要注意的是如果给出了的字符串有重复字符,则需要剪枝操作。下面为回溯的代码class Solution {public:vector<stri原创 2020-09-24 07:58:26 · 165 阅读 · 0 评论 -
每日一题47. 全排列 II
给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[[1,1,2],[1,2,1],[2,1,1]]这题看完后是头痛的,还是用dfs算法比较好解,首先把这道题理解成给你一些数字,让你用这些数字进行填空,最后把所有填得的数列存起来返回。难点:这些数字是具有重复性质的因此,需要一个数组来纪录某个数字及其重复数字是否填入,如果填入就跳过,否则继续。vector<int> vis;vis.resize(nums.size());if(vis原创 2020-09-18 18:38:00 · 181 阅读 · 0 评论 -
面试题 05.07. 配对交换
配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。示例1:输入:num = 2(或者0b10)输出 1 (或者 0b01)示例2:输入:num = 3输出:3这题开始没搞懂,以为是十进制的奇数偶数交换,然后发现是2进制的奇数偶数交换,开始使用stl容器进行纪录每一个数位的数字,再进行交换class Solution {public: int exchangeBits(int num) { ve原创 2020-09-13 12:04:18 · 187 阅读 · 0 评论 -
面试题 08.01. 三步问题
三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。示例1:输入:n = 3输出:4说明: 有四种走法示例2:输入:n = 5输出:13有一说一,这就是青蛙跳台阶问题,我开始写的代码如下class Solution {public: int waysToStep(int n) { int sum = 0; dfs(n,sum);原创 2020-09-13 11:38:41 · 159 阅读 · 0 评论 -
每日一题单词搜索
给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”, 返回 true给定 word = “SEE”, 返回 true给定 word = “ABCB”, 返回 false应该使原创 2020-09-13 11:16:34 · 164 阅读 · 0 评论 -
每日一题总结二叉树的层平均值
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。示例 1:输入:3/ 9 20/ 15 7输出:[3, 14.5, 11]解释:第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。这道题的实质是考察层序遍历,深度优先搜索和广度优先搜索对深度优先而言,需要维护两个序列,一个用来保存节点数,一个用来保存节点之和,最后除。对于深度优先而言DSF函数需要四个参数,根节点,当前层数,节点数队列,节点队列DFS原创 2020-09-12 11:03:14 · 193 阅读 · 0 评论 -
C++复习:类型转换
C++类型转换C++类型转换分为两类隐式转换显示转换隐式转换原则基本数据类型的转换以取值范围的作为转换基础隐式转换发生在从小到大的转换中,比如,从char到int,从int到long中。自定义子类对象可以隐式转换到父类对象中。隐式转换发生条件混合类型的算术运算中int a=3;double b = 4.5;a+b;不同类型的赋值操作int a=true...原创 2019-11-06 20:55:16 · 202 阅读 · 0 评论 -
[网络]——UDP协议分析
写完了TCP,运输层的UDP协议最好也总结一下,本篇博客资料来自谢希仁《计算机网络》,真的很推荐看一遍。1.UDP协议UDP协议是运输层协议,有以下的特点。UDP是无连接的UDP尽最大努力交付,但不保证可靠性UDP是面向报文UDP没有拥塞控制UDP支持一对一,一对多和多对多的交互通信。UDP的首部较短只有8个字节UDP是无连接发送数据前不需要建立连接,发送完后同样不需要...原创 2019-11-03 11:07:29 · 738 阅读 · 1 评论 -
[网络]——编程套接字和BSD相关API
终于完成了linux的几种设计模式来到了网络的章节,在这里我们可以尝试实现TCP,UDP的c/s服务器,不过在这之前,首先了解网络编程的一些基础概念。套接字套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。 ...原创 2019-11-01 12:05:34 · 520 阅读 · 0 评论 -
[linux]-------线程池
上一篇博客我们实现了读者写者模型,在这篇博客中更进一步的完成线程池。线程池概念开辟一块内存空间,里面存在大量的(未死亡的)线程,池中的线程调度由池管理器来处理,当有线程任务时,从池中选一个线程运行,当运行完毕后,该线程又返回池中,这样就避免了反复创建线程所带来的性能开销,节省了系统资源。如果对线程概念不清晰的话,不妨先看看我是一个线程这篇文章线程池的应用场景需要大量的线程来完成任务...原创 2019-10-30 20:23:13 · 171 阅读 · 0 评论 -
[Linux]--------读者写者模型
在之前的博客中我们说明了生产者消费者模型,在这篇博客中我们讨论类似的模型读者写者模型。概念读者写者模型是操作系统的一种同步与互斥机制,与生产者消费者模型相似,区别在于多个读者可以共享缓冲区,但是对于写者而言相互是竞争关系,一次只能有一个写者,写入缓冲区。读者写者模型具有的条件写者排他性:有多个写者的情况下,只有一个写者能够占用缓冲区。读者的并行机制:可以有多个读者同时使用缓冲区。如...原创 2019-10-30 14:16:56 · 390 阅读 · 0 评论 -
[Linux]——基于信号量的生产者消费者模型
生产者消费者模型在上一篇博客[Linux]------基于阻塞队列的生产者消费者模型中,我们实现了单生产者消费者模型,在本篇博客中,我们的生产者消费者模型会有两个改变不是用一般队列作为缓冲区,而是用环形队列作为缓冲区不使用pthread_mutex,而使用信号量来实现生产者消费者的同步。POSIX信号量使用的是POSIX信号量而不是之前的system_v,因为这两个信号量作用相同,都...原创 2019-10-29 22:00:30 · 342 阅读 · 0 评论 -
[Linux]------基于阻塞队列的生产者消费者模型
生产者消费者概念在实际的开发中,通常会碰到一个场景,有一个模块产生数据被称为生产者,另一个模块来接受数据被称为消费者(此处的模块是指广义的模块 函数,类,进程等),但是有生产者和消费者的场景还不能称为生产者消费者模型,还需要一个缓冲区在生产者和消费者之间作为中介,生产者把数据放到缓冲区中,消费者从缓冲区中取数据。这个关系类似生活中我们到超市买东西,供货商将商品送到超市,我们就是消费者,供货商...原创 2019-10-29 17:11:17 · 243 阅读 · 0 评论 -
C语言复习:const ,static ,sizeof,宏
这篇博客是对于我个人的知识的复习,当然如果有某位大佬能够指出这里面有哪些概念含糊不清或者难懂,麻烦指出来感激不尽。1.constconst:用const修饰的变量是“可读的”,即可以被访问,但是无法修改。const可以修饰指针,数据成员,成员函数,类对象修饰指针指针常量和常量指针顾名思义,类似int* const p;//指针常量,const修饰pconst int* q;...原创 2019-10-28 12:17:58 · 228 阅读 · 0 评论