自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(230)
  • 资源 (3)
  • 收藏
  • 关注

原创 每天一道LeetCode-----判断数组中是否存在两个位置上面的值相等并且下标的差小于某个值

原题链接Contains Duplicate II判断给定数组中是否存在i和j,使得nums[i] == nums[j]并且j - i <= k只需要保存每个数最后出现的下标,当再次遇到这个数时,进行比较,如果满足条件则返回,否则更新下标实现代码如下class Solution {public: bool containsNearbyDuplicate(ve...

2018-06-13 17:23:22 1527 2

原创 每天一道LeetCode-----找到由连续数字组成的数组中缺失的那个连续值

原题连接Missing Number给定大小为n的数组,由0, 1, 2, …, n构成,也就是缺少了一个值,找到它。要求时间复杂度是O(n),空间复杂度是O(1)因为整体有序而且每个元素是严格加一递增(只有一个不是,假设这个值是m),考虑下面两个和的表示形式sum1 = 0 + 1 + 2 + ... + m-1 + m+1 + ... + n = 1 + 2 + ...

2018-06-12 12:42:13 5318

原创 每天一道LeetCode-----找到给定数组中第三大的值

原题链接Third Maximum Number要求找到给定数组中第三大的数,第一大的数,第二大的数,第三大的数互不相同,即严格的小于关系。并且规定时间复杂度是O(n)。另外如果找不到第三大的数,则返回数组中第一大的数可以用三个变量first, second, third分别记录第一大第二大以及第三大的数,初始化时是整数范围的最小值,在随后遍历数组的过程中进行比较(假设遍历到的数用n表...

2018-06-11 17:36:47 1881

原创 C++代码片段(五)tuple的实现

元组tuple是多类型的集合,可以当做升级版的pair来用。因为tuple可以保存多个任意类型的值,导致不能够在一个类里面保存所有的数据,所以采用每一层保存一个数据的方法实现实现tupletemplate <typename... Args>class tuple{};/* 每一层保存一个T类型的数据 */template <typename T,...

2018-06-08 23:18:31 2012

原创 数据库原理学习笔记(二)数据库范式

范式可以理解成在设计数据表时的规范级别,常见的范式有第一范式(1NF)第二范式(2NF)第三范式(3NF)BC范式(BCNF)第一范式要满足第一范式,要求数据表的每个属性无法再分,也就是需要满足原子性。可以把“不可再分”理解成无法用一个单独的值表示,比如说“系”这个属性,平时常说的“计算机系”,“化学系”实际上指的是系名,而系的管理者被称为系主任,所以对于“系”这个属...

2018-06-04 23:23:23 1565

原创 数据库原理学习笔记(一)关系完整性以及数据库完整性

关系完整性是对关系的某种约束,当关系随着时间变化(增删改等操作改变数据库关系表)时应该满足一定的约束条件,通常这些约束条件都依赖于客观事实关系完整性包含三个方面,分别是实体完整性参照完整性用户自定义完整性其中实体完整性和参照完整性是关系模型必须满足的约束条件,或者说是所有数据库管理系统都自动支持的约束条件。而用户自定义完整性则是根据不同的应用程序(不同的使用场景)有选择的设置的...

2018-06-03 23:53:55 6573 2

原创 C++代码片段(四)萃取模板类的模板参数类型

例如有类型Test<int, double, std::string>可以萃取出模板参数分别是int, double, std::string方法如下#include <tuple>#include <iostream>template <typename...>struct template_argument...

2018-06-03 18:51:37 755

原创 解决MySQL使用LOAD导入中文数据乱码的问题

假设将文本employee.txt中的数据导入到表EMPLOYEE中出现乱码的SQL语句LOAD DATA LOCAL INFILE "employee.txt" INTO TABLE EMPLOYEE;解决方法,在后面添加character set utf8LOAD DATA LOCAL INFILE "employee.txt" INTO TABLE EMPLOYEE ...

2018-06-03 18:40:45 5192 3

原创 C++代码片段(三)过滤可变模板参数中某些类型的变量

将可变模板参数列表中的某些类型过滤掉,然后返回剩下数据的元组。用到了上一篇中的判断可变模板参数中是否包含某一特定类型的方法#include <iostream>#include <tuple>#include <string>#include <vector>#include <list>template <ty...

2018-05-29 19:06:35 685

原创 解决无法将自己github上的代码clone到/usr目录下的问题

Linux下代码存在的位置有两种/home下面,需要当前用户权限/user/local/include以及其他类似的位置,需要root用户权限与之对应的.ssh位置也有两个~/.ssh,保存当前用户的public key/root/.ssh,保存root用户的public key将代码clone到/home目录下申请ssh公钥(email替换成注册github时...

2018-05-28 12:31:16 1573

原创 C++代码片段(二)判断可变模板参数中是否包含某一特定类型

首先定义基础模板类,表示不包含给定类型template <typename T, typename... Args>struct contains : public std::false_type {};接着进行特化,将可变模板参数中的类型逐个和目标类型进行比较,直到类型相同或者模板参数列表为空template <typename T, typename U...

2018-05-26 17:26:43 3943

原创 C++代码片段(一)萃取函数返回值类型,参数类型,参数个数

函数的类型主要集中在以下几种函数指针函数对象,是一个类对象,内部重载的operator()函数是一个函数指针lambda,匿名函数对象,同函数对象function对象 后三者都是类对象,可以看成一种类型定义基础模板类template <typename T>struct function_traits;针对函数指针进行模板特化对...

2018-05-26 15:27:49 3391

原创 每天一道LeetCode-----判断给定字符串是否符合某个模式

Isomorphic Strings原题链接Isomorphic Strings给定两个字符串,判断其中一个是否能转换成另一个,转换规则如下必须是一对一同一个字符两次转换必须相同,如果第一次字符’a’转换成’b’,那么当下次遇到’a’时,它就只能转换成’b’不能有两个字符转换成相同字符,如果第一次’a’转换成’b’,那么之后其它的字符都不能再转换成’b’思路:通过两...

2018-03-06 11:38:51 2427

原创 HTTP协议学习笔记(一)请求方法名及状态码

HTTP协议是位于TCP协议之上的应用层协议,是应用进程之间通讯的一种协议。之所以称之为应用层协议,是因为它无需关心数据是通过什么方式到达对端的,在到达对方的应用程序之前都经历了什么,而只需要协商好使用的数据格式,保证一方可以解析出另一方的意图即可 这也是TCP/IP协议的真正目的,上层无需过度关心底层的实现细节当用户在浏览器上输入一段网址后,主要经历了以下几个阶段dns解...

2018-03-05 23:35:19 1321

原创 每天一道LeetCode-----计算小于n的素数个数

Count Primes原题链接Count Primes计算小于n的素数个数思路:如果一个数m是素数,那么所有m * k就都不是素数。另外2是最小的素数代码如下class Solution {public: int countPrimes(int n) { vector<int> nums(n 1); int c...

2018-03-05 11:13:58 5396

原创 每天一道LeetCode-----判断一个数是否是happy number(每一位的平方和最终为1)

Happy Number原题链接Happy Number对一个数的每一位求平方和,如此反复下去,知道满足以下条件时证明这是一个happy number某一时刻平方和为1进入无限循环按要求做就可以了class Solution {public: bool isHappy(int n) { if(n == 1) { r...

2018-03-04 22:47:51 1746

原创 每天一道LeetCode-----计算给定范围内所有数的与运算结果

Bitwise AND of Numbers Range原题链接Bitwise AND of Numbers Range计算[m:n][m:n][m : n]范围内的所有数的与运算结果首先需要明确几个知识点a&(a+1)a&(a+1)a \& (a + 1)的最低位一定是00&b0&b0 \& b的结果一定是0a&(a+1)&amp...

2018-03-03 21:15:29 321

原创 TCP/IP学习笔记(九)TCP报文段首部格式

TCP为了实现稳定可靠的传输,自然是需要在发送数据时附带一些信息,对端接收到报文段后将用户数据分离开存放在接收缓冲区,然后根据附加信息决定接下来的行为。所以即使TCP是面向字节流的传输协议,但是传输的基本单元却是报文段。报文段由报文首部和数据组成,报文首部最小占20字节最多占60字节,固定的20字节包含各种连接信息,可扩展的40字节存放各种选项值源端口和目的端口各占2个字节...

2018-03-02 21:18:11 2798

原创 每天一道LeetCode-----给定二维数组代表海域和岛屿,计算有多少个孤岛

Number of Islands原题链接Number of Islands给定一个二位数组,其中’0’代表水,’1’代表土地,判断有多少个孤岛被水隔开。假定二位数组四周都是’0’思路:遇到一个’1’就代表肯定有孤岛,然后从这个位置开始将所有相邻的’1’都变为’0’代码如下class Solution {public: int numIslands(vec...

2018-03-02 16:06:20 4365

原创 TCP/IP学习笔记(八)复位报文段

TCP报文首部中存在一个RST位,如果该位被置1则表示这是个复位报文段。当一个报文段从一端发往一个不存在或者处于异常状态的另一端时,就会以一个复位报文段应答发送端,告知发送端连接出现错误,应当被关闭有三种连接情况可能会产生复位报文段尝试连接到一个不存在的<ip,port>主动关闭的一方的套接字设置了SO_LINGER选项,并且超时时间为0另一端异常崩溃导致连接处于半关闭状...

2018-03-01 20:01:21 654

原创 每天一道LeetCode-----从右向左观察一棵二叉树,返回能看到的元素

Binary Tree Right Side View原题链接Binary Tree Right Side View从右向左观察一棵二叉树,返回能看到的元素遍历一遍即可,只记录靠右的元素代码如下/** * Definition for a binary tree node. * struct TreeNode { * int val; * Tre...

2018-03-01 14:29:19 3588

原创 TCP/IP学习笔记(七)四次挥手

前面说过,TCP是稳定可靠的传输层协议,稳定体现在需要先建立连接(三次握手)才可以进行通讯。但是当一方想要关闭连接时,如果它一走了之,另一端又怎么知道连接已经关闭了呢,这就会导致另一端仍然保持着维护连接所需要的一切资源而无法释放。所以TCP在关闭连接时也需要进行类似三次握手之类的流程,以通知双方关闭连接,释放资源。称为四次挥手四次挥手关闭一个TCP连接需要进行四次报文交互,任意...

2018-02-28 20:22:30 347

原创 每天一道LeetCode----从数组中选择若干不连续元素使得总和最大

House Robber原题链接House Robber给定一个数组,选取一些元素使得总和最大,选取规则为不能连续取两个元素,即选取的元素之间至少要间隔一个其它元素每个元素都有选与不选两种可能,使得用动态规划求解,令dp[n]表示nums[0 : n)的选取结果代码如下class Solution {public: int rob(vector<...

2018-02-28 12:41:44 6687

原创 TCP/IP学习笔记(六)Nagle算法

在TCP传输数据流中,存在两种类型的TCP报文段,一种包含成块数据(通常是满长度的,携带一个报文段最多容纳的字节数),另一种则包含交互数据(通常只有携带几个字节数据)。对于成块数据的报文段,TCP采用正常的流程发送即可,因为数据利用率很高。而对于交互数据的报文段,数据利用率就显得很低,在网络环境不好的情况下容易加重网络负担。所以TCP必须对交互数据单独处理 交互数据实际上就是字节数很少...

2018-02-27 18:54:54 8726 2

原创 每天一道LeetCode-----计算整型数二进制中1的个数/返回二进制翻转后的结果

Reverse Bits原题链接Reverse Bits给定一个32位无符号整型数,将它的二进制逆序,返回结果从字符串的角度观察二进制逆序,只需要从两端开始两两交换即可。当然,完全可以不将二进制转为字符串,而是模拟字符串的逆序操作代码如下class Solution {public: uint32_t reverseBits(uint32_t n) { ...

2018-02-27 13:47:28 601

原创 每天一道LeetCode-----寻找给定字符串中重复出现的子串

Repeated DNA Sequences原题链接Repeated DNA Sequences在给定字符串中寻找重复出现的序列,每个序列长度为10可以采用unordered_map记录每个序列出现的个数,将出现超过一次的添加到结果集中代码如下class Solution {public: vector<string> findRepeatedDn...

2018-02-26 20:54:08 5715 1

原创 TCP/IP学习笔记(五)TCP的保活定时器

正常情况下,TCP连接的终止需要经历四次挥手阶段,体现在代码上就是某一端主动调用close函数关闭套接字,随后TCP向对端发送FIN位被置为1的报文段标志着连接的结束,同时对端响应应答报文段,并在随后的某一时刻同样调用close函数,发送FIN报文段,当确认完成后就标志着TCP连接正常终止。然而,考虑一种情况,在TCP连接建立成功后,客户端主机突然崩溃(断电,断网等),导致客户端的TCP还没来...

2018-02-26 16:12:04 533

原创 TCP/IP学习笔记(四)TCP超时重传及拥塞控制

TCP是可靠的传输层协议,但这并不意味着一端发送的数据一定可以到达另一端,因为传输过程中遇到的情况是不可控的,很有可能就有某些数据发生丢失,所以”可靠”其实并不可靠。不过毕竟现如今的网络设备还算完善,传输过程中由于硬件错误导致数据丢失的情况基本可以忽略,那么,数据丢失的原因就只能是:传输路径过于拥堵,导致某些路由器或链路缓冲区无法再容纳多余数据,那么对于新来的数据包就只能丢掉。为了解决这一...

2018-02-26 00:21:53 3196

原创 TCP/IP学习笔记(三)TCP流量控制以及滑动窗口

众所周知,TCP是有缓冲区的,比如接收缓冲区用于存放已经到达但是还没有被应用程序及时处理的数据。但是任何缓冲区都是有一定大小的,如果发送方发送数据过快,而接收方处理数据过慢,就会导致接收方的接收缓冲区数据量不断累积最终塞满缓冲区。随后如果再有数据到达就只有一个结果,数据被丢掉为了解决这一问题,TCP引入了流量控制功能,所谓流量控制,就是让发送方发送速率不要太快,要让接收方来得及处理。通过滑动窗...

2018-02-26 00:19:50 901 1

原创 TCP/IP学习笔记(二)TCP三次握手

TCP是一种面向连接的流传输协议,提供了对数据传输时的各种控制功能,比如当丢包时可以重新发送即使数据到达顺序错乱也可以保证数据的有序性由于TCP是面向连接的协议,所以必须在确定通信对端存在时才会发送数据,即三次握手。好比于A和B打电话,电话拨通后 A对B说:”你好,我是A,你能听见我说话吗”(第一次握手) B听到A的询问回答说:”你好,我能听见你说话,你能听...

2018-02-25 20:09:20 707

原创 每天一道LeetCode-----将数值数组按一定顺序拼接,使得拼接的结果最大

Largest Number原题链接Largest Number给定一个数值数组,将数组中的数值按照一定顺序拼接在一起,使得拼接的结果值最大思路:将原数值数组转为字符串数组,方便拼接和比较将字符串数组排序从头到尾拼接结果难点在如何对字符串数组排序,为了使结果最大,可以得知需要将数字打的排到前面,以图片为例,9的数字最大,所以排在第一位随后是5,排在第二位对...

2018-02-25 12:58:43 7263

原创 每天一道LeetCode-----计算n的阶乘末尾有多少个0

Factorial Trailing Zeroes原题链接Factorial Trailing Zeroes 计算n!(n的阶乘)末尾有多少个0思路:0实际上来源于10,而10来源于2×5,所以只需要判断n×(n−1)×(n−2)×...×1n×(n−1)×(n−2)×...×1n×(n-1)×(n-2)×...×1可以拆分成多少个2×52×52×5即可。而2的个数明显多于5的个...

2018-02-24 16:50:33 2653 4

原创 TCP/IP学习笔记(一)分层模型概述

Reverse Bits原题链接Reverse Bits给定一个32位无符号整型数,将它的二进制逆序,返回结果从字符串的角度观察二进制逆序,只需要从两端开始两两交换即可。当然,完全可以不将二进制转为字符串,而是模拟字符串的逆序操作代码如下class Solution {public: uint32_t reverseBits(uint32_t n) { ...

2018-02-23 23:10:23 1516

原创 每天一道LeetCode-----摩尔投票法寻找给定数组中出现个数大于n/2或n/3的元素

Majority Element原题链接Majority Element给定一个数组,元素个数为n,找出出现次数大于n/2的那个元素摩尔投票法思想 每次从数组中选择两个不相等的元素进行相互抵消(删除),最后剩下的一个元素或几个相同的元素就是出现次数大于n/2的元素代码如下class Solution {public: int majorityElem...

2018-02-23 14:06:19 2908

原创 每天一道LeetCode-----将数字用字母表示(本质是26进制转换)

Excel Sheet Column Title原题链接Excel Sheet Column Title讲数字转为字母’A’到’Z’表示,对应关系如图思路:本质上是将10尽职转为26进制,不同的是模的结果从[0:25][0:25]变为[1:26][1:26]假设1<=n%26<=261 <= n \% 26 <= 26,那么0<=(n−1)%26<=250 <= (n - 1) \% 26 <= 2

2018-02-22 15:13:13 2355 1

原创 每天一道LeetCode-----比较两个字符串,每个字符串被若干'.'分成多个数字,一个个比较

Compare Version Numbers原题链接Compare Version Numbers字符串比较的题,给定两个字符串,每个字符串都被若干个’.’分开,形成若干个整数,从头开始比较一个个整数,判断大小代码如下class Solution {public: int compareVersion(string version1, string version2) {

2018-02-12 23:15:35 705

原创 每天一道LeetCode-----在给定序列中找到满足nums[i]>nums[i-1]&&nums[i]>nums[i+1]的位置,要求时间复杂度是O(logN)

Find Peak Element原题链接Find Peak Element给定一个序列,找到一个位置i满足nums[i]>nums[i−1]&&nums[i]>nums[i+1]nums[i]>nums[i-1]\&\&nums[i]>nums[i+1],其中nums[−1]nums[-1]和nums[n]nums[n]可以看成负无穷。要求时间复杂度是O(logN)本题实际上是局部最大值的问题,如

2018-02-11 22:17:53 1143

原创 每天一道LeetCode-----寻找两个链表的交点

Intersection of Two Linked Lists原题链接Intersection of Two Linked Lists两个链表,从某个节点开始相交,找到相交节点方法很多,简单列举一下将其中一个链表的头尾相连,问题转化为求环入口节点用两个栈分别记录两个链表的节点,再弹出,找到最后一个相等的节点将长的链表移动长度差的距离,然后同时移动两个链表,找到第一个相等...

2018-02-10 15:22:15 7435 1

原创 每天一道LeetCode-----实现一个栈,提供一个接口用于返回栈中最小值

Min Stack原题链接Min Stack实现一个栈,除了基本功能外需要提供一个接口用于返回栈中元素的最小值基本功能使用std::stack就够了,如果每次需要最小值时都遍历栈中元素的话会很麻烦,因为栈不支持遍历(本质上是没有提供迭代器),所以只能在push的时候记录最小值思路是这样的,使用另一个std::stack记录最小值。简称最小栈push时记录最小值的方法是...

2018-02-09 20:37:05 1502

原创 C++11学习笔记-----获取异步操作执行结果

在多线程环境中,不管是传递lambda还是传递函数指针,再或者是传递函数对象给std::thread,都很难获取执行函数返回值。在以前,只能将结果以引用的形式作为线程函数参数的一部分以此保存返回值,但是仍然存在很大局限性,甚至不太美观。C++11引入的std::future可以有效解决这一问题。std::future定义在头文件&lt;future&gt;中,提供了一种获取异步操作返回值的...

2018-02-08 19:40:11 3507 1

二叉树和森林之间的转换

二叉树和森林之间的转换

2017-03-29

数据结构之跳表

数据结构之跳表的完整代码

2017-03-18

跳表完整代码

跳表完整代码

2017-03-17

空空如也

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

TA关注的人

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