自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

canvasa的博客

Practice makes perfect

  • 博客(209)
  • 收藏
  • 关注

原创 MySQL必知必会2

1、关于查询结果集的去重mysql> select distinct job from emp; // distinct关键字去除重复记录。+-----------------+| job |+-----------------+| CLERK || SALESMAN || MANAGER || ANALYST || PRESIDENT |+-----------------+ mysql> select ...

2021-01-08 18:03:50 224

原创 MySQL必知必会1

对数据库进行查询和修改操作的语言叫做 SQL(Structured Query Language,结构化查询语言)。SQL 语言是目前广泛使用的关系数据库标准语言,是各种数据库交互方式的基础。著名的大型商用数据库 Oracle、DB2、Sybase、SQL Server,开源的数据库 PostgreSQL、MySQL,甚至一些小型的数据库 Access 等都支持 SQL。近些年蓬勃发展的 NoSQL 系统最初是宣称不再需要 SQL 的,后来也不得不修正为 Not Only SQL,来拥抱 SQL。

2020-12-20 21:23:08 238

原创 菱形继承和虚继承

一、单继承和多继承单继承:一个子类只有一个直接父类时,称这个继承为单继承。 多继承:一个子类有俩个或以上的直接父类时称这个继承关系为多继承。单继承:可以有多个父类,但是只能由一个直接父类。示意图如下:多继承示意图如下:菱形继承示意图如下:菱形继承对象模型:Assistant的对象中有两份Person成员,菱形继承存在数据冗余和二义性的问题。菱形继承举例:class person{public: string _name;}; class studen

2020-08-28 18:28:09 390

原创 C++ sizeof关键字总结

1. 定义sizeof是一个操作符(operator)。其作用是返回一个对象或类型所占的内存字节数,其返回值类型为size_t。(size_t在头文件stddef.h中定义,它依赖于编译系统的值,一般定义为 typedef unsigned int size_t;)2. 语法sizeof有三种语法形式:sizeof (object); //sizeof (对象)sizeof object; //sizeof 对象sizeof (type_name); //s

2020-08-27 16:35:32 166

原创 static关键字总结

1. C 语言的 static 关键字有三种(具体来说是两种)用途:a. 静态局部变量:用于函数体内部修饰变量,这种变量的生存期长于该函数。int foo(){ static int i = 1; // note:1 //int i = 1; // note:2 i += 1; return i;}我们首先要了解c/c++的内存分布,以及static所在的区间。对于一个完整的程序,在内存中的分布情况如下: 栈区: 由编译器自动分配释放,像局部变量,函数参数,都是在栈区.

2020-08-27 15:53:57 112

原创 C++ const 关键字总结

C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。1. const的作用1.可以定义const常量。const int Max = 100;2.便于进行类型检查。const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类...

2020-08-27 10:26:55 98

原创 判断链表的回文结构

OJ链接:链表的回文结构解题方法:快慢指针法,如下图所示:找出链表中间位置 逆置后一半链表 将逆序后的与原来的前半部分作比较代码/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {}};*/class PalindromeList {public: bool chkPalindrome(ListNode* A.

2020-08-11 21:55:21 91

原创 循环链表II

OJ链接:循环链接II方法一:快慢指针使用快慢指针,快指针每次走2步,慢指针每次走1步。当有环相遇时,说明快指针走过的路程是慢指针的两倍,假设链表头结点到环入口位置距离为a,环的入口与相遇节点位置距离为b,环的长度为R,我们计算快慢指针所走过的距离:d(fast)=a+b+n*R, d(slow)=a+b。快指针的速度是慢指针的两倍,相同时间,快指针所走过的路程应该是慢指针所走过路程的两倍,于是:d(fast)=2*d(slow)。所以有:a=n*R-b。当n = 1时,也就是快.

2020-08-11 17:13:49 111

原创 环形链表

OJ链接:环形链表思路一:快慢指针我们定义两个指针,初始位置都放在头节点的地方,然后快慢指针一起走,快指针一次走两步(需要注意边界条件),慢指针一次走一步,如果快指针走到nullptr,该链表就不带环;如果快慢指针相遇,该链表就带环。例如:两个人在操场跑步,一个人的速度是另一个人的两倍,如果跑的快的人追上跑的慢的人,那么快的人必然超过慢的人一圈。那么在链表中,也是一样的。代码/** * Definition for singly-linked list. * struct List.

2020-08-11 15:54:28 139

原创 和并两个有序链表

OJ链接:合并两个有序链表解题思路:依此比较两个链表,取较小值,进行尾插,返回head。/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */typedef struct ListNode Node;struct ListNode* mergeTwoLists(struct ListNode* l1, struct

2020-08-11 10:41:47 92

原创 几个关于GetMemory的经典问题

TEST1void GetMemory1(char *p){ p = (char *)malloc(100);}void Test1(void) { char *str = NULL; GetMemory1(str); strcpy(str, "hello world"); printf(str);}调用GetMemory( str )后,str并未产生变化,依然是NULL。改变的只是str的一个拷贝的内存的变化 。 strcpy(...

2020-08-08 20:16:49 331

原创 C语言模拟实现strstr函数

形式:char * strstr ( const char * str1, const char * str2 );strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。 例如:str1[20]="abcdefg",str2[10]="bcd"。通过使用strstr函数可以得到”bcdefg“,输出的是你需要查找的字符串的位置。思路start——>str1, substart——&gt

2020-08-07 17:56:32 287

原创 C语言模拟实现memmove函数

memmove 是一个内存操作函数,不是字符串操作函数,它可以处理多种类型的数据。 void *memmove(void*dest,const void*src, size_t count );NOTE:它的返回值是void*,参数类型也是void*,这样它才可以处理不同类型的数据。 目标dest不能加const,源src加const。原因是我们需要从源src中拷贝数据到dest中,需要对dest进行赋值。若用const保护dest,便不能完成赋值操作。 memmove的好处是可以处理d...

2020-08-07 16:15:23 274

原创 翻转单词顺序列

OJ链接:翻转单词顺序列题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?解题思路是一个字符串逆置的问题,我们这里要考虑自己划分子串的问题。 例如:“student. a a

2020-07-29 23:15:01 115

原创 左旋转字符串

OJ链接:左旋转字符串题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!解题思路方法一:保存第一个,剩下的整体前移一个,第一个放在后,完成一次移动,一次能移动,多次也可以。 方法二:局部逆置,在整体逆置。例,“abcXYZdef” ->左移3

2020-07-29 22:49:32 97

原创 二叉树层序遍历

OJ链接:二叉树层序遍历题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。解题思路借助queue完成。代码/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: vector<int

2020-07-28 16:09:21 92

原创 链表中倒数第k个结点

OJ链接:链表中倒数第k个结点题目描述输入一个链表,输出该链表中倒数第k个结点。解题思路题目中的链表是单链表,不能从后往前进行。 可以定义两个指针,一个指针先走k步,再让另一个指针跟在后面,使用“前后指针”的方式,当前面的指针到达结尾,后面的指针,也就是倒数第k个节点。代码/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/c

2020-07-23 09:49:22 90

原创 二进制中1的个数

OJ链接:二进制中1的个数题目描述输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。解题思路用最优的方案代码class Solution {public: int NumberOf1(int n) { int count =0; while(n) { n&=(n-1);//可以避免无效检测 count++; }

2020-07-23 09:39:17 75

原创 重建二叉树

OJ链接:重建二叉树题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路根据root节点,将中序vector划分成vin_left,vin_right两部分中序子序列。 根据中序子序列长度,将前序vector划分成pre_left, pre_right对应的前序子序列。 root->le

2020-07-21 17:22:06 96

原创 从尾到头打印链表

OJ链接:从尾到头打印链表题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。解题思路方法一,stack方式,这种方式会有内存占用过多的问题。 方法二,逆置数组。 方法三,递归方式。代码方法一/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL)

2020-07-21 16:33:59 103

原创 替换空格

OJ链接:替换空格题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路因替换内容比被替换内容长,所以,一定涉及到字符串中字符的移动问题,移动方向一定是向后移动,所以现在的问题是移动多少的问题。 因为是 ' ' -> "%20",是1换3,所以可以先统计原字符串中空格的个数(设为n),然后可以计算出新字符串的长度 new_length = old_length + 2

2020-07-21 16:15:09 125

原创 数组中出现次数超过一半的数字

OJ链接:数组中出现次数超过一半的数字题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。解题思路思路一:定义map,使用<数字,次数>的映射关系,最后统计每个字符出现的次数。 思路二:排序,出现次数最多的数字,一定在中间位置。然后检测中间出现的数字出现的次数是否符合要求。 思路三:同时去掉两个不同的数字,到最后剩

2020-07-21 15:47:40 111

原创 调整数组顺序使奇数位于偶数前面

OJ链接:调整数组使奇数位于偶数前面题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路借鉴一下插入排序的思想,从前往后,把偶数往后移动,腾出位置放入奇数。代码class Solution {public: void reOrderArray(vector<int> &array) { int

2020-07-20 16:59:23 80

原创 旋转数组的最小数字

OJ链接:旋转数组的最小数字题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。题目解析数组问题,本质其实是一个求小值问题。方法一:理论上,遍历一次即可,但是我们可以根据题面使用稍微高效且更简单一点的做法。按照要求,要么是一个非递减排序的数组(小值在开始).

2020-07-20 16:50:20 63

原创 二维数组中的查找

OJ链接:二维数组中的查找题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路数组样式如下: 1 2 3 4 2 3 4 5 3 4 5 6正常查找的过程,本质就是排除的过程,如果双循环查找,本质是一次排除一个,效率过低。根据题面要求,我们可以采取从右上角(或左下角)进行比较,这样可以做到一次排除一 行或者一列。代码...

2020-07-20 16:38:28 96

原创 协程

1. 协程协程可以理解为一种用户态的轻量级线程, 切换由用户定义 协程上下文切换很快, 因为不会陷入内核态 协程拥有自己的寄存器上下文和栈, 协程调度切换时,将寄存器上下文和栈保存到其他地方,在切换回来的时候,恢复先前保存的寄存器上下文和栈优点协程具有极高的执行效率 因为子程序切换不是线程切换,是由程序自身控制,因此协程没有线程切换的开销, 多线程的线程数量越多,协程的性能优势就越明显 访问共享资源不需要多线程的锁机制, 因为只有一个线程, 也不存在同时写变量冲突, 所以在协程中控制共享资源

2020-07-19 11:06:19 155

原创 最短路径走出迷宫

题目描述NowCoder最喜欢游乐场的迷宫游戏,他和小伙伴们比赛谁先走出迷宫。现在把迷宫的地图给你,你能帮他算出最快走出迷宫需要多少步吗? 题目链接:走迷宫解题思路1. 采用一个二维数组,不断的接受迷宫地图(因为有多个地图),获取到迷宫地图后,采用广度 优先方式走迷宫,找到的第一条路径一定是最短的路径,但是深度优先则不一定。2. 结构设定:pos:x,y表示当前所在位置,level所经过步数 dir: 表示当前位置的上、下、左、右四个方向 queue: 广度优先遍历,需要用到队列,保.

2020-07-18 10:51:54 419

原创 实现后缀表达式的计算器

解题思路循环输入,获取逆波兰表达式(后缀表达式),然后进行以下步骤,直到测试完所有的测试用例:遇到数字字符串,将该数字字符串转化为数字然后入栈。利用int atio(const char ptr)将数字类型的字符串转换成整形数据;它包含在stdlib.h头文件中; 这里的参数类型是char所以这里要将string转化为c类型的string,在进行转化。 遇到操作符时,从栈顶取两个数字,然后进行该运算符所对应运算,完成好将结果入栈。NOTE:根据逆波兰表达式定义:先取到的数字为运算符的右操...

2020-07-17 10:52:00 271

原创 高级IO

1. 五种典型的IO模型IO完成过程:1. 等待IO就绪(满足IO的条件) 2. 进行数据拷贝。1.1 阻塞IO发起IO调用,若IO条件不具备,则一直等待。 优点:流程非常简单,一个IO完成后进行下一个。 缺点:无法充分利用资源,效率较为低下。1.2 非阻塞IO发起IO调用,若IO条件不具备,则立即报错返回,可以做其他事情,完毕后循环回来重新发起IO请求。 优点:相较于阻塞IO,对资源的利用较为充分,可以利用就绪等待时间做其他事情或者发起另一个IO调用。 缺点:相较于阻塞IO,流程稍

2020-07-16 17:59:12 90

原创 最长上升子序列

题目链接:最长上升子序列解题思路动态规划的难点在于定义数组和创建“状态转移方程”。1. 定义height来存储数据,f[i]为以height[i]结尾的元素的最长上升子序列元素个数,初始时 将f所有内容全部初始化成1,因为子序列中至少包含一个元素。 2. 定义"状态转移方程" 一开始先将f中的数据全部置为1,因为最小的子序列长度为1 然后对于每个height[i],通过遍历height[0]~~height[i-1]之间的数据,如果在该区间中找 到一个height[j]比height[

2020-07-16 10:14:36 152

原创 蘑菇阵

题目解析该题类似于走迷宫,蘑菇代表不能走通,但不同的是,迷宫可以向前后左右四个方向移动,但该题走的方式只能向右或者向下两个方向移动,注意:右边界处只能向一个方向移动,因此走不通路径的概率是不相等的。比如:M = 2 N = 3 1 2 3 4 5 6 在1时:既可向右走到2,也可向下走到4,因此从1-->2 和从1-->4的概率均为0.5 在2时:即可向右走到3,也可向下走到5,因此从2-->3和从2-->5的概率均为0.5 在3时:只能走到6,因此从3-->..

2020-07-14 10:53:21 239

原创 求正数数组的最小不可组成和 (动态规划:01背包问题)

一、解决问题1、题目描述2、题目解析 动态规划:01背包问题(无物品价值),思想相同,题目最终要求有些变化。min为最轻物品的重量,sum为所有物品总重量。假设有一个能装入容量为C(C在[min,sum]间取值)的背包和n件重量分别为w1,w2,…,wn的物品,能否从n件物品中挑选若干件恰好装满背包,要求输出不满足条件的最小容量。 该题要求数组的最小不可组成和,例如arr = {3,2,5} arr的min为2,max为10,在区间[2,10]上,4是不能被任何一个子集相加得到的值...

2020-07-03 17:23:02 451

原创 网络层@链路层

网络层:负责地址管理与路由选择(为每一条网络中的数据根据想去的地方选择合适的路径);IP;路由器IP协议格式: 4位版本号:IPV4/IPV64位首部长度:标识IP报头有多长,以4字节为单位()...

2020-06-27 08:48:45 225

原创 红黑树

红黑树:搜索二叉树,节点中加了颜色,不是红色就是黑色,树中最长路径不超过最短路径的2倍。AVL树是严格平衡的二叉搜索树,红黑树是近似平衡二叉树。红黑树的性质总结:1、根是黑的;2、没有连续的红节点;3、每条路径都有相同数量的黑节点。为什么满足上面的性质,红黑树就能保证:其最长路径中节点个数不会超过最短路径节点个数的2倍? 答:最短路径:全黑,最长路径:一黑一红,所以最多是2倍。插入case1:cur为红,p为红,g为黑,u存在且为红.----> p和u变红,g变红。..

2020-06-24 18:08:35 203

原创 用一种思路实现二叉树的非递归前序/中序/后续遍历

非递归遍历前序/中序/后续思路一样,只不过是访问根节点的时机不同!!!1、前序非递归前序遍历:1 2 4 5 3 6 7 根 左子树 右子树非递归(迭代)访问一棵树访问左路节点并入栈; 访问左路节点的右子树(将右子树分成左路节点和右树来访问)class Solution {public: vector<int> preorderTraversal(TreeNode* root) { vector<int> ret; ...

2020-06-16 16:36:39 118

原创 应用层协议@传输层协议

应用层协议:应用层是面对程序员的一层,应用程序是程序员自己写的,因此应用层协议由程序员自己决定。 1、自定制协议:序列化:将多个数据对象按照指定的协议进行组织成为持久化存储/数据传输的二进制数据串。 反序列化:将二进制数据串通过指定协议进行解析得到各个数据对象。 序列化方式:结构体二进制序列化,json,protobuf. 2、知名协议:HTTP-应用层的超文本传输协议-html。 网址:URL-统一资源定位符-定位网络中某台主机上的某个资源。 如何定位:url包含的要素-...

2020-06-01 11:12:46 1359

原创 模拟实现vector

#pragma once#include<assert.h>namespace ywt{ template<class T> class vector { public: typedef T* iterator; typedef const T* const_iterator; vector() :_start(nullptr) , _finish(nullptr) , _endofstorage(nullptr) {} /.

2020-05-21 16:02:26 127

原创 socket套接字编程

网络通信中的数据必须带有:源端IP,源端端口,目的端IP,目的端端口,协议。 套接字编程头文件 #include <netinet/in.h> // struct_sockaddr_in结构体的定义以及协议的宏#include <arpa/inet.h> // 字节序转换接口#include <sys/socket.h> // 套接字接口 1、UDP UDP流程图...

2020-05-20 10:03:24 171

原创 只出现一次的数字

1、解题思路:异或:相同为0,不同为1。异或同一个数两次,原数不变。class Solution {public: int singleNumber(vector<int>& nums) { int value=0; for(auto e: nums){ value ^= e; } return value; }};2、解题思路:考虑数字的二进制形式--&gt.

2020-05-19 18:55:59 284

原创 网络基础

交换机:实现主机之间的数据交换 路由器:不但实现数据交换,而且实现数据的路径选择 网络的划分:局域网(1000m),城域网(20KM),广域网(大于20KM) 互联网/因特网 组织方式: 以太网/令牌环网 在复杂的网络通信中,必须保证每个主机都有自己唯一的标识符 网络中主机的唯一标识----IP地址 IP地址: IPV4:uint32_t --无符号四个字节的整数(4G)--不到43亿--IP地址是不够用的; DHCP--&g...

2020-05-14 21:52:30 178

空空如也

空空如也

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

TA关注的人

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