自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SQL

select P.FirstName,P.LastName,A.City,A.StateFROM Person P left join Address A ON P.personId = A.personId;//第二高薪水SELECT IFNULL( (SELECT DISTINCT SalaryFROM Employeeorder by Salary DESC limit 1,1),NULL ) as 'SecondHighestSal.

2020-06-04 19:53:13 197

原创 HDU - 2586 How far away ? (LCA最近公共祖先)

LCA入门问题,以后总结~~~#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<string>#include<string>#include<vector>#include<queue>#include<stack>#include<cmath>#incl

2020-06-04 17:00:39 204

转载 Https 建立安全连接的过程(SSL原理)

目录1. 基础知识2. 一个加密通信过程的演化3. 证书的构成和原理1、基础知识1.1公钥密码体制分为三个部分,公钥、私钥、加密解密算法,它的加密解密过程如下:加密:通过加密算法和公钥对内容(或者说明文)进行加密,得到密文。加密过程需要用到公钥。 解密:通过解密算法和私钥对密文进行解密,得到明文。解密过程需要用到解密算法和私钥。注意,由公钥加密的内容,只能由私钥进行解密,也就是说,由公钥加密的内容,如果不知道私钥,是无法解密的。公钥密码体制的公钥和算法都是公开的(这是为什么叫公.

2020-05-23 23:39:13 443

原创 LeetCode---背包问题

LeetCode上没有背包基本模型题,有几个简单的背包类的题,这里总结一下 。目录416. 分割等和子集322. 零钱兑换518. 零钱兑换 II416. 分割等和子集给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5,...

2020-04-28 15:45:37 184

原创 Leetcode---并查集

简介 并查集是一种数据结构,一般它处理的是图(其实是解决无向图的)的连通分量问题,但是当并查集的根节点可以维护更多的信息时,并查集可以解决范围更广的基于无向图连通分量的问题。做了这么多并查集的题目后,我感觉并查集就是解决有关物与物之间的关系问题的数据结构且这种关系还必须是可传递的关系,所以一般遇到这种问题可以先尝试用并查集解决。并查集操作比较简单,主要是理解...

2020-04-26 21:41:19 304 1

原创 LeetCode---二叉树

二叉树是数据结构的基础,本文对LeetCode上的一些题型做一个总结目录一、遍历二、根据遍历去求一些东西一、遍历遍历分为 递归遍历、非递归遍历、以及O(1)空间实现遍历(Morris); 以及层次遍历。94. 二叉树的中序遍历/** * Definition for a binary tree node. * struct TreeNode { * ...

2020-04-18 17:16:17 149

原创 LeetCode---全排列(递归、next_permutation、康托展开)

目录一、递归求全排列二、next_permutation实现三、康托展开一、递归求全排列46. 全排列class Solution { vector<vector<int>> ans; public: vector<vector<int>> permute(vector<int>&...

2020-04-15 19:57:13 294

原创 LeetCode---链表

目录一、反转链表 类型二、双指针类型三、链表合并类型四、链表排序一、反转链表 类型206. 反转链表/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : va...

2020-04-12 15:43:00 158

原创 计算机网络---HTTP1.0、HTTP1.1、HTTP2.0

一、HTTP简介 1.HTTP协议,即超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。 2.HTTP协议作为TCP/IP模型中应用层的协议;HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之...

2020-04-08 23:02:01 655

原创 LeetCode---数位DP

简介数位DP是一种计数的DP,一般就是要统计一个区间[l,r]内满足一些条件的个数。所谓数位DP, 意思就是在数位(个位,十位,百位,,,)上进行DP。对于这种问题的求解思路:先得出解ans[x]([1,x]区间内满足条件的个数)的方法,利用前缀和的思路,最终的解为ans[r] - ans[l-1]。问题的关键是:怎么求ans[x]?我们采用枚举的方式,控制上界枚举,从最高位开始往...

2020-03-29 18:37:17 1106

原创 LeetCode---区间DP

简介:区间DP在leetcode上也有体现(主要是合并石子类型),本文就leetcode上出现的区间DP做一个总结。题目原型:5301 石子合并 0x50「动态规划」例题描述设有N堆沙子排成一排,其编号为1,2,3,…,N(N<=300)。每堆沙子有一定的数量,可以用一个整数来描述,现在要将这N堆沙子合并成为一堆,每次只能合并相邻的两堆,合并的代价为这两堆沙子的数量...

2020-03-29 15:32:37 1005

原创 康托展开和逆康托展开

简述康托展开是一个全排列到一个自然数的双射,常用于构建hash表时的空间压缩。设有n个数(1,2,3,4,…,n),可以有组成n!种的排列组合,康托展开表示的就是是当前排列组合在n个不同元素的全排列中的名次。原理X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0!其中ai表示第i个元素在未出现的元素中排第几...

2020-03-16 23:59:16 138

原创 LeetCode---双指针

文章目录1.有序数组问题1.1 [leetcode 15. 三数之和](https://leetcode-cn.com/problems/3sum/)1.2 [16. 最接近的三数之和](https://leetcode-cn.com/problems/3sum-closest/)1.3 [18. 四数之和](https://leetcode-cn.com/problems/4sum/)1.4 [...

2020-03-01 21:15:33 132

原创 数据结构 --- 平衡二叉树、B树、B+树 、B*树

平衡二叉树B树B+树B*树总结平衡二叉树平衡二叉树是基于二分法的策略提高数据的查询速度的二叉树的数据结构;特点:平衡二叉树是采用二分法思维把数据按规则组装成一个树形结构的数据,用这个树形结构的数据减少无关数据的检索,大大的提升了数据检索的速度;平衡二叉树的数据结构组装过程有以下规则:(1)非叶子节点只能允许最多两个子节点存在。(2)每一个非叶子节点数据...

2019-09-15 16:26:43 131

原创 非比较排序--- 计数排序、基数排序、桶排序

计数排序计数排序是一种稳定的排序算法。计数排序是最简单的特例,由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量时间和内存,实用性不高。例如:计数排序是用来排序0-100之间的数字的最好的算法;另外,计数排序可以用在基数排序中的算法来排序数据范围很大的数组。计数排序的时间复杂度为O(n+k)n为...

2019-09-14 15:43:40 164

原创 LeetCode 126. 单词接龙 II (最短路 dijkstra算法)

给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回一个空列表。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 begi...

2019-08-18 19:55:02 605 2

原创 FZU - 1686 神龙的难题 (舞蹈链,可重覆盖)

这是个剑与魔法的世界.英雄和魔物同在,动荡和安定并存.但总的来说,库尔特王国是个安宁的国家,人民安居乐业,魔物也比较少.但是.总有一些魔物不时会进入城市附近,干扰人民的生活.就要有一些人出来守护居民们不被魔物侵害.魔法使艾米莉就是这样的一个人.她骑着她的坐骑,神龙米格拉一起消灭干扰人类生存的魔物,维护王国的安定.艾米莉希望能够在损伤最小的前提下完成任务.每次战斗前,她都用时间停止魔法停住时间,然后...

2019-08-14 20:12:14 127

原创 舞蹈链---精确覆盖,解决数独问题

首先看看数独问题(9*9的方格)的规则1、每个格子只能填一个数字2、每行每个数字只能填一遍3、每列每个数字只能填一遍4、每宫每个数字只能填一遍那现在就是利用这个规则把数独问题转换为精确覆盖问题可是,直观上面的规则,发现比较难以转换为精确覆盖问题。因此,把上面的表述换个说法1、每个格子只能填一个数字2、每行1-9的这9个数字都得填一遍(也就意味着每个数字只能填一...

2019-08-14 20:05:59 292

转载 舞蹈链---解决覆盖问题

精确覆盖问题的定义:给定一个由0-1组成的矩阵,是否能找到一个行的集合,使得集合中每一列都恰好包含一个1例如:如下的矩阵就包含了这样一个集合(第1、4、5行)如何利用给定的矩阵求出相应的行的集合呢?我们采用回溯法矩阵1:先假定选择第1行,如下所示:如上图中所示,红色的那行是选中的一行,这一行中有3个1,分别是第3、5、6列。由于这3列已经包含了...

2019-08-14 19:41:06 132

原创 LeetCode 1125. 最小的必要团队 (可重覆盖,舞蹈链)

1125. 最小的必要团队作为项目经理,你规划了一份需求的技能清单req_skills,并打算从备选人员名单people中选出些人组成一个「必要团队」( 编号为i的备选人员people[i]含有一份该备选人员掌握的技能列表)。所谓「必要团队」,就是在这个团队中,对于所需求的技能列表req_skills 中列出的每项技能,团队中至少有一名成员已经掌握。我们可以用每个人的编...

2019-08-14 19:34:09 413

原创 LeetCode 813. 最大平均值和的分组

813. 最大平均值和的分组我们将给定的数组A分成K个相邻的非空子数组 ,我们的分数由每个子数组内的平均值的总和构成。计算我们所能得到的最大分数是多少。注意我们必须使用 A 数组中的每一个数进行分组,并且分数不一定需要是整数。示例:输入:A = [9,1,2,3,9]K = 3输出: 20解释:A 的最优分组是[9], [1, 2, 3], [9]. 得到...

2019-08-08 16:04:46 206

原创 LeetCode 51 ---- N皇后 (搜索,二进制优化)

51. N皇后和数独类似,用二进制记录状态去搜索,变量list记录当前列中存放情况,如果当前位为1 说明 当前数字存放了,否则反之,比如:5代表0个和第2个数字存放了(从0开始)。同理:变量left记录左斜线,变量right记录右斜线。class Solution {public: int list,left,right; int queen[111]...

2019-07-28 21:36:18 111

原创 Sudoku POJ - 2676 (数独,搜索,位运算优化)

问题描述:给定一个由3*3的方块分割而成的9*9的格子。其中一些格子中填有1~9的数字,其余格子则是空白的。请在空白的的格子填入1~9的数字,使得在每行、每列和每个3*3的方块中,1~9的每个数字都恰好出现一次。row[i]的二进制代表当前行的状态,如果当前位为1说明该行还没放该数,比如当前row是4,说明数字3还没放,3说明数字1,2还没放。col[i],grid[i][j]...

2019-07-28 21:04:44 214

原创 HDU---1043 POJ 1077 Eight 八数码问题 广度优先搜索 康拓展开

问题:很经典的搜索,给定一个3*3的方格,里面放1-8个数字,有一个空格,空位可以与相邻的数字可以移到空格中,问给定一个状态,怎么移动到一个特定的状态(比如1-8顺序存放)。康拓展开记录当前的状态,BFS即可。HDU 1043是让给定多组状态,怎么还原成1-8顺序存放,可以倒叙BFS,打标出所有状态,POJ 1077是一组数据,直接正向搜索即可。思考:A*怎么解决这道题...

2019-07-28 18:01:11 167

原创 LeetCode---尺取法

POJ 3061题意:给出长度为n的数列整数以及整数S。求出总和不小于S的连续子序列的长度的最小值。如果解不存在,则输出#include<cstdio>#include<iostream>#include<algorithm>using namespace std;#define rep(i,a,n) for (int i=...

2019-06-28 15:04:37 190

原创 智能指针的简单实现

智能指针使用引用计数简单实现:#include <iostream>using namespace std;template<class T>class SmartPtr{public: SmartPtr(T *p); ~SmartPtr(); SmartPtr(const SmartPtr<T> &amp...

2019-06-15 16:12:18 187

原创 LeetCode---蓄水池抽样算法

面试的时候被问到这个问题了,一脸懵逼。 问题:从n个元素中随机抽取k个元素,其中N无法确定。 解法:我们总是选择第一个对象,以1/2的概率选择第二个,以1/3的概率选择第三个,以此类推,以1/m的概率选择第m个对象。当该过程结束时,每一个对象具有相同的选中概率,即1/n,证明如下。 证明:第m个对象最终被选中的概率P=选择m的概率*其后面所有对象不被选择的概率,即...

2019-06-14 14:17:16 2856

原创 LeetCode 买卖股票的最佳时机 (动态规划)

121. 买卖股票的最佳时机class Solution {public: int maxProfit(vector<int>& a) { int n = a.size(); if(!n)return 0; int _min = a[0]; int ans = INT_M...

2019-06-13 17:35:28 372

原创 LeetCode --- 动态规划(二)

132. 分割回文串 II给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回符合要求的最少分割次数。示例:输入: "aab"输出: 1解释: 进行一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。分析: 定义状态dp[i]表示分割字符串str[0,i]最少需要分割多少次。状态转移:j位于0~i之间,如果str[j...

2019-06-13 12:19:49 310

原创 单调栈总结

LeetCode上有几道单调栈的类型题,这里拿出来总结一下下。单调栈的引入常常是这样一道题:LeetCode84. 柱状图中最大的矩形:class Solution {public: int largestRectangleArea(vector<int>& h) { int n = h.size(); ...

2019-06-12 01:05:48 206

原创 LeetCode --- 动态规划(一)

LeetCode前200道题中的动态规划10. 正则表达式匹配比较难的一道动态规划,给出两种方法。当前位置不是*比较容易,是*的时候要考虑可以不用前面的符号和用多次的问题。class Solution {public: bool match(char* str, char* pattern) { int m = strlen(s...

2019-06-11 23:20:46 209

原创 Manaher算法

Manacher算法Manacher算法能够在O(N)的时间复杂度内得到一个字符串以任意位置为中心的回文字符串。算法的基本原理是:利用已知的左半部分去推右半部分。令rad[i] 表示:第i个字符的回文半径,即rad[i]尽可能大。且满足s[i – rad[i] ,i-1] = s[i+1...

2019-06-03 00:02:36 255

原创 条款25:考虑写出一个不抛异常的swap函数

本条款名字虽然在说“不抛异常”,然而内容重点却在正确的设计swap使得更高效、节省资源!首先,swap标准程序库定义:template<typename T>void swap(T& a, T& b){ T tmp(a); a = b; b = tmp;}然而,这种复制的成本对于某些class没有必要,我们这里来看...

2019-05-31 11:17:21 196

原创 条款24:若所有参数皆需类型转换,请为此采用non-member函数

本条款说的就是:当某个函数的参数进行类型转换时,那么这个函数必须应该是个non-member函数。

2019-05-31 00:32:06 104

原创 条款23:宁以non-member non-friend替换member函数

本条款看的云里雾里的,看网上其他大佬总结的才明白了~拿书上的例子:class WebBrower{public: void ClearCach(); void ClearHistory(); void RemoveCookies();};定义了一个WebBrower的类,里面执行对浏览器的清理工作,包括清空缓存,清除历史记录和清除Cookies,现...

2019-05-30 23:44:27 135

原创 条款22:将成员变量声明为private

一、从几个角度考虑为什么要讲将成员变量设置为private1、一致性我们让客户能够访问对象的方法是通过成员函数,否则客户需要考虑加不加括号。2、使用函数可以对成员变量处理有更精确的控制3、从封装的角度考虑二、protect的封装性并不好总结:1、切记将成员变量声明为priv...

2019-05-30 21:01:52 139

原创 条款21:必须返回对象时,别妄想返回其reference

受条款20影响,可能会强烈追求传递引用,然而返回对象时,一定不要返回引用。一、不管在哪创建对象,都不可以返回引用二、甚至,你可能会想到静态变量然而情况更糟糕:总结:老老实实地返回值吧~绝不要返回pointer或reference指向一个localstack对象,或返回reference指向一个heap-allo...

2019-05-30 20:18:06 129

原创 条款20:宁以pass-by-reference-to-const替换pass-by-value

一、传递const引用的好处1.减少传值的拷贝成本:通过by value方式传递一个对象,成本是多次构造函数,析构函数的调用,加上继承代价。2.避免对象切割问题:二、内置类型传值注意:1、尽量以 pass-by-reference-to-const替换 pass-by- value。前者通常比较高效,并可避免切割问题( slicing problem...

2019-05-30 17:09:59 155

原创 条款19:设计class犹如设计type

本条款主要给出定义出高效的class 需要注意的地方:总结:Class的设计就是type的设计。在定义一个新type之前,请确定你已经考虑过本条款覆盖的所有讨论主题。...

2019-05-30 16:05:38 101

原创 条款18:让接口容易被正确使用,不易被误用

一、让接口不容易被误用这里给出的例子是关于日期的类的设计:二、限制类型内什么可做,什么不可做三、与内置类型兼容、保持接口一致四、消除客户管理的责任,使用智能指针如果函数返回指针,客户有可能没有删除指针,或者删除指针超过两次,因此返回智能指针比较好。总结:1、好的接口很容易被正确使用,不...

2019-05-30 15:49:19 166

空空如也

空空如也

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

TA关注的人

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