- 博客(70)
- 资源 (1)
- 收藏
- 关注
原创 两小时一起快速搭建个人博客
原文参加我的博客我的新博客两个小时的时间我一般用来鉴赏影片,不过搭一个博客刚好也OK。搭建一个自己的博客需三部曲:下载安装包,部署环境,美化博客页面下载安装包本文用的博客是使用Hexo + Github,需要安装以下内容:安装Node.js,安装地址:Node.js下载链接安装Git,安装地址:Git下载地址对于以上两个安装Mac建议从Homebrew安装node和git,...
2019-11-07 21:20:09
293
原创 Swap Nodes in Pairs---24---交换链表相邻节点
题目描述:交换链表中的相邻节点input : 1->2->3->4 output : 2->1->4->3思路: 首先判断有两个节点存在,这样才能完成交换while(pre->next && pre->next->next)找到一个temp节点保存第二个节点的值交换第一个节点和第二个节点pre移到下一个需要交换的地...
2019-09-07 17:09:02
250
原创 C++之深拷贝&浅拷贝
什么是拷贝构造函数?通过拷贝对象的方式创建一个新的对象,拷贝构造函数的参数必须是类对象的引用,也就是将一个对象拷贝给另一个新建的对象(用途,在创建对象的时候,使用同一类之前创建的对象来初始化新创建的对象)Book(Book &b);//必须是引用的原因是,如果是传值方式将实参传递给形参,中间要经历一个对象的拷贝,对象拷贝由必须调用拷贝构造函数,这样就形成一个死循环,无解拷贝构造函...
2019-09-04 09:33:42
247
原创 Invert Binary Tree---226---反转二叉树
题目描述:反转二叉树,把二叉树变成左右对称的方法一:递归遍历,交换当前左右节点,不断递归调用方法二:类似于层序遍历,根节点入队,保存队首节点并出队交换队首节点的左右子节点,如果左右子节点存在,依次push进队列#include <iostream>#include <vector>#include <queue>using namespace s...
2019-09-03 20:23:19
200
原创 Maximum Depth of Binary Tree---104--求二叉树的深度
题目描述:求二叉树的最大深度,深度优先DFS,递归的完美运用方法一:递归遍历方法二:层序遍历增加一个求层数count#include <iostream>#include <vector>#include <queue>using namespace std;struct TreeNode{ int data; TreeNod...
2019-09-03 17:46:30
175
原创 Binary Tree Postorder Traversal---145---后序遍历
题目描述:给出一颗二叉树,返回他的后序遍历input 1,null, 2,3 output 3,2,1思路:两种解法:递归(比较简单)和迭代迭代法:递归问题本质是栈的调用,所以递归写法可以转换为栈写法后序遍历:左-右-根方法一:比较复杂,要判断左节点右节点是否访问过首先把根节点push栈中,temp为栈顶,如果temp没有子节点或者其中某个子节点被访问过temp就出栈,且hea...
2019-09-03 16:39:39
145
原创 Binary Tree Inorder Traversal---94--中序遍历
题目描述:给出一颗二叉树,返回他的中序遍历input 1,null, 2,3 output 1,3,2思路:两种解法:递归(比较简单)和迭代中序遍历:左-根-右首先把根节点push栈中,然后不断指向左指针,把所有的左子节点入栈,然后出栈栈顶元素,把指针移到他的右子节点上,继续循环#include <iostream>#include <vector>#i...
2019-09-03 16:20:39
261
原创 Binary Tree Preorder Traversal---144---二叉树前序遍历
题目描述:给出一颗二叉树,返回他的前序遍历input 1,null, 2,3 output 1,2,3思路:两种解法:递归(比较简单)和迭代迭代法:递归问题本质是栈的调用,所以递归写法可以转换为栈写法前序遍历:根-左-右首先把根节点push栈中当栈不为空的情况下,根节点(栈顶元素)出栈,再把右节点入栈,再把左节点入栈为什么先入右再入左,因为栈是先进后出,这样就是先出左后出右#...
2019-09-03 15:18:05
206
原创 Binary Tree Level Order Traversal---102--二叉树层序遍历
题目描述:给出一颗二叉树,返回他的层序遍历,队列的解法input 1,null, 2,3 output {[1],[2],[3]}思路:层序遍历是广度优先的BFS的应用首先建立一个队列,根节点入队队列不为空的情况下,根节点出队,左右子节点入队,此时队列里是下一层的节点for循环遍历这一层的队列,同时再把他们的子节点入队,上一层的节点出队,依次类推就是层序遍历#include &l...
2019-09-03 15:04:49
180
原创 Linked List Cycle(find the start node)---142--找到环的起始点
题目描述:找到链表中环节点input : 3->2->0->-4 ->2 output : 1思路:找到头节点和相遇点到环起始点的关系,可以证明相遇点到环起始点和头节点到环起始点的距离相等证明:头节点到环节点距离x,环节点到相遇点y,相遇点到环节点z,快指针走的距离是慢指针的2倍S慢 = x + y + nC S快 = 2S慢 = x + y + mC =...
2019-09-02 20:40:01
433
原创 Remove duplicates from sorted List---83---删除有序链表的重复元素
题目描述:删除有序链表中的重复元素input:1->1->2->3->3 output: 1->2->3思路:直接判断当前节点和下一个节点值是否相等,相等就越过这个节点,然后依次遍历链表注意当用到next的时候要判断是否还有下一个节点#include<iostream>#include<vector>using name...
2019-09-02 14:42:10
212
原创 Sort List---148---链表排序(归并)
题目描述:给链表排序input : 4->2->1->3 output : 1->2->3->4思路:要求在O(nlgn)时间复杂度内,合适的排序方法快排,堆排,归并,还有O(n)的基数排序桶排序链表的特点不能通过下标访问,堆排一般是数组形式,所以最好采用归并排序(递归操作)温故而知新:回顾下归并排序,将两个已经排好序的序列合并成一个有序序列merge...
2019-09-02 11:52:03
203
原创 Merge Two Sorted Lists---21---合并有序链表
题目描述:合并有序链表input 1->2->4 , 1->3->4 output 1->1->2->3->4->5思路:先判断两个链表是否有一个为空建立一个虚拟的头节点当两个链表都存在的时候,比较data的值,小的那个节点就放在head后面head节点不断向后增加当有一个节点为空的时候,就把剩余的节点整体移过来,返回虚拟头节点的...
2019-09-01 18:45:41
191
原创 Remove Nth Node From end of list---19---删除链表倒数第N节点
题目描述:移除链表的倒数第N个节点input 1->2->3->4->5,n=2;output 1->2->3->5思路:关键在于如何巧妙找到倒数第N个节点,依旧是快慢指针首先要判断链表不为空,head的next至少要存在快指针先走N步此时如果快指针为空,则N为链表长度,返回的是head->next开始的链表反之如果快指针不为空,慢指针...
2019-09-01 18:35:32
133
原创 Find All Duplicates in an Array---442---找到数组中的重复元素
找到数组中的重复元素,之前有说过有序数组去重,是删除重复元素(快慢指针,相同元素时快指针走一步,不同元素时快指针慢指针都走一步,此时快指针的值赋给慢指针),现在本题是找到重复元素题目描述:input=[4,3,2,7,8,2,3,1],输出 [2,3],关键在于1<= A[i]<=n思路:正数变负数的方法,关键在于找到数组中的数和下标之间的关系,数组中的数字-1就是新下标根据新下...
2019-09-01 16:17:20
211
原创 Two Sum---1---两数之和两种解法
这是Leetcode的第一个题目,同时也让我看到时间复杂度的重要性本文给出两个解法,看下优秀的解法大大提高了时间复杂度题目描述:给一个数组nums=[2,7,11,15],target=9;求出两个数相加和为9的下标方法一:普通方法,循环数组,知道找到另一个数=target-循环数方法二:unordered_map的用法,里面是无序的无重复的元素,底层是hash表,map底层是红黑树#i...
2019-09-01 12:06:36
219
原创 Add Strings---415---字符串相加
题目描述:字符串相加“123”+“123”=“246”//思路:不难,一位一位的相加,算和及进位,根据进位情况看是否需要补一个高位//注意:string字符转化为int整数相加,-‘0’,同样int整数,转为string+‘0’//类似的还有:二进制相加,链表相加,字符串加1#include<iostream>#include<string>using nam...
2019-08-30 12:16:32
283
原创 Remove Duplicates from Sorted ArrayII---80---有序数组去重2
题目描述:有序数组去重,允许重复次数2思路:同样采用快慢指针的方法,多增加一个count记录还有几次重复,初始值11 一开始快指针指向1,慢指针指向02 如果快慢指针对应值相等即重复,并且count为0,那么快指针走一步3 否则:如果快慢指针对应值相等,即重复一次,那么count减1,否则,不重复,count恢复为1此时,慢指针走一步,把快指针的值赋给慢指针,然后快指针走一步返回慢指针...
2019-08-28 21:15:17
169
原创 Remove Duplicate Letters---316--删除字符串中的重复字符
题目描述:删除字符串中的重复字符input="bcabc", output="abc"思路:hash表+visited结合+0字符的巧妙运用1 首先建立一个hash表,里面是所有字符出现的次数2 每个字符默认设为未访问3 结果result增加一个初始值0,为了方便比较4 每循环一次字符,就把hash的次数减1,如果已经访问过,跳出,开始下个字符循环5 如果没访问过,比较这个字符和re...
2019-08-28 20:47:19
252
原创 Linked List Cycle---141---单链表是否有环
思路:判断链表是否有环:快慢指针法1. 首先要判断头节点和头节点的next都不为空(这样目的是链表存在环,如果为空,即false,不存在环)2. 快慢指针都指向头节点head3. 循环当fast的next和fast的next的next都存在时,开始走路(确保快指针有后继)4. 快指针每次走两步:fast = fast->next->next;慢指针走一步slow = slow...
2019-08-28 15:49:09
161
原创 HTTPS的加密过程详解
HTTP 有以下安全性问题:(划重点:不够安全)使用明文进行通信,不做任何加密,内容可能会被窃听(个人隐私,账户密码)不验证通信方的身份,通信方的身份有可能遭遇伪装;可能访问钓鱼网站无法证明报文的完整性,收到的报文有可能遭篡改或植入广告。那么为什么别人能够获取你的上网数据?HTTP 是应用层的协议,位于 TCP/IP 参考模型的最上层。用户数据经过应用层、传输层、网络层、链路层的层层...
2019-08-26 11:21:01
672
原创 Longest Common Substring---最长公共子串--DP系列
最长公共字串是动态规划的典型题目,下次为小伙伴们整理下动态规划的其他题目题目描述:最长公共字串(不同于最长公共子序列,字串是连续的)str1 = “abcde”str2 = “abcdfe”,最长公共字串是abcd,长度为4思路:首先维护一个二维vector的dp数组dp [i][j] 表示公共子串中A字符串中第i个字符结尾,B字符串中第j个字符结尾的长度,找到重复子问题,判断A的第...
2019-08-23 22:08:46
267
原创 TCP和UDP的区别
tcp传输控制协议,udp用户数据报协议1)TCP面向连接(三次握手机制),通信前需要先建立连接;UDP面向无连接,通信前不需要建立连接,也不需要收发数据的确认,速度快,实时性更好2)TCP保障可靠传输(按序、无差错、不丢失、不重复);UDP不保障可靠传输,使用最大努力交付;(TCP的可靠仅仅体现在传输层,我也可以让UDP可靠,就要向上封装,在应用层实现可靠)3)TCP面向字节流的传输,就是...
2019-08-23 14:05:30
237
原创 new和delete详解基础篇
new delete动态的分配内存和释放内存,都是操作符可以重载,不是函数,但是可以调用构造函数和析构函数new动态分配单个空间new[]动态分配一个数组delete释放由new分配的单个空间delete[]释放new[]分配的一个数组delete处理单个对象,会先调用析构函数,释放它所占资源,然后释放它所占内存空间,而delete[]会调用每一个数组对象的析构函数// 使用方...
2019-08-23 09:51:05
510
原创 Remove Duplicates from Sorted Array---26--有序数组去重
题目描述:有序的数组里面移除重复的数字,并返回数组的长度类似题目还有字符串去重,hash表统计出现次数,详见字符串去重博客Example 1:Given nums = [1,1,2],Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively...
2019-08-21 22:32:30
246
原创 指针和引用详解---基础篇
#include using namespace std;int main(){int a[5] = {1,2,3,4,5};int *p = a;cout << p<<endl;cout <<*p<<endl;p++;cout << p<<endl;cout << *p<<endl...
2019-08-21 22:07:46
239
原创 Const和Static详解
const 分为三种介绍普通const对象(变量) 一旦创建就不能再改变,所以const的对象必须要初始化,必须赋值,不然没有意义(难道不可更改一个没有的东西)这里插播一个define,虽然# define a 30;也是让a不可更改,但是他是替代,出现几次替代几次。产生多个副本,const只有一个副本,define不能定义数据类型对于类里面的const我们分为四种const成员变...
2019-08-21 20:43:08
643
原创 Kth Largest Element in an Array--215--找到无序数组中第K大的数字
题目描述:Example 1:Input: [3,2,1,5,6,4] and k = 2Output: 5Example 2:Input: [3,2,3,1,2,4,5,5,6] and k = 4Output: 4思路:好像没啥特殊的,就是排序就可以了,本博客选取的是快排,当然也有堆排快排可以使用库里面自带的sort函数,速度较快,自己写的很慢,我的是88ms,让我想起来研...
2019-08-20 20:37:25
283
原创 Reverse Linked List--206--单链表逆序
这是本专栏的第一篇博客,还是要说几句哈。读到博客的小伙伴,我已经默认你有一定的计算机基础(抑或找工作的经验了),所以就不再解释每道题目的含义了,除非特别绕口的,本博客主要是提供一种思路和一个勉强能运行的代码示例,可能不是最优解,所以还想通过博客的方式跟大家一起探讨一二。题目描述:单链表的逆序,就是反转链表Input: 1->2->3->4->5->NULLOut...
2019-08-20 17:51:01
204
原创 面向对象及继承基础篇
什么是面向过程?面向过程如C语言,就是把要实现的功能分成很多模块,就是函数,每个函数就是一个功能,可能被多次调用。面向过程以过程为中心的编程思想,分析解决问题的步骤,然后用函数把步骤一步步实现。什么是面向对象?JAVA是纯面向对象,C++既可以面向对象也可以面向过程把要实现的功能打包封装成一个类,类里面有他的属性和函数方法,用类定义对象,比面向过程更加抽象,将问题结构化处理,更抽象。比如人...
2019-08-20 16:32:14
211
原创 进程空间内存分配详解
进程空间的内存分配从高地址到低地址如图所示:名称操作系统内核区用户不可见用户栈栈指针,向下扩展动态堆向上扩展全局区(静态区).data初始化.bss未初始化文字常量区(只读数据)常量字符串程序代码区栈指针,向下扩展下面详细介绍这几个区域:1.栈区:由编译器自动分配释放,速度较快程序在编译期对变量,返回地址,参数和函数分...
2019-08-20 11:50:00
6547
2
原创 排序算法之堆排序
2堆排序 不稳定 快速 适合海量数据利用堆的数据结构来排序(参见堆博客)堆是一种优先队列,两种实现,最大堆和最小堆,这里先讲解最大堆(以下简称堆),堆是一个完全二叉树,根节点要永远保持最大,大于子节点,所以一旦堆内数据发生变化,要重建堆堆排的步骤:建堆,最大堆或者最小堆堆顶元素跟堆尾元素互换堆尺寸-1,继续调整成最大堆重复,知道堆大小为1堆漂亮的特性是能够用一个数组来表示一...
2019-08-19 11:18:48
151
原创 排序算法之快速排序
1 快排 递归 不稳定发生在基准元素与v[L]交换 需要partition三步走,一找二划三递归快排的步骤:选一个元素做基准进行partition,就是把比基准小的放在基准的左边,把比基准数大的放到右边,划分结束后基准元素位于中间(如何划分看代码,从后往前找和从前往后找)对每个分区递归操作上述划分函数,直至每个分序列大小为0或1(递归结束的条件)最差的情况O(n2)每次选的基准...
2019-08-19 11:16:26
368
原创 排序算法之各排序的总体概括
从时间复杂度分析最慢---->最快O(n2),冒泡稳定、直接插入稳定、直接选择不稳定,虽然速度慢,但胜在简单O(nlgn)–O(n2),希尔排序(插入排序的改进版),不稳定很快的O(nlgn),快排不稳定,堆排序不稳定(适合大数据),归并排序稳定,可达到On的是计数排序,基数排序,桶排序从空间复杂度分析大部分空间复杂度都是O(1)只有归并的空间复杂度是O(n)快排是O(...
2019-08-19 11:13:27
179
原创 数据结构之数组和链表
数组1 是顺序存储的相同数据类型的数据结构,在内存空间上地址也是连续的,所以在声明数组的时候就要确定长度声明数组静态创建数组 int array[100];//定义一个大小100的数组,没有初始化int array[2]= {1,2};//定义长度为2的数组,并初始化int array[20]= {1,2};//定义长度为20的数组,并初始化前两个new动态创建:使用new分配一个数...
2019-08-18 16:30:29
488
原创 网络为什么要分层&OSI七层模型及TCP/IP五层体系
网络为什么要分层设计?想象课本中的乘客从买机票到抵达目的地的全过程,我们将具有相似功能的部分划分为同一层,每一层具有两个功能:对上一层提供服务使用来自下面层的服务分层的优点:(概念化和结构化)每层的功能明确,使得功能更加模块化,结构化降低耦合性,便于开发,当某一层的功能实现改变时,不影响其它层(因为仅仅是功能的实现方式改变了,但最后还是实现的那个功能)国际化标准的指定OS...
2019-08-12 20:09:07
3580
1
原创 C#Json解析
本文的编写背景是你有一个json格式的文件,然后需要将其显示在WPF的ListView页面首先找到json文件的位置 :string jsonFilePath = ".\\Link.json";//json文件路径然后读里面的json字符串 : string jsonString = File.ReadAllText(jsonFilePath);json字符串的反序列化 :var te...
2019-07-13 10:49:46
485
1
原创 C#根据网址下载文件并显示进度条(HttpClient)
最近做了一个小工具,叫做渠道包检查,大概就是检查我们做的安装包再给各个渠道,用户从渠道下载的是否正常第一项就是下载文件到本地并显示进度条,这里用到了HttpClient类,HttpClient中可以使用ProgressMessageHandler获得上传下载进度,以百分比的形式呈现,可以将其绑定到页面显示;代码如下: /// <summary> ///...
2019-07-11 17:12:13
4456
3
原创 WPF样式及页面学习
近来用WPF 写了一个小工具,不过期望自己可以使用自定义样式,如下:首先你需要在WPF中添加一个新建的资源字典,就是Dictionary.xaml用于放你自己的各种样式(style),如图所示,每个控件写一个Style,给每个控件一个Key,这个Key用于主页面引用该样式,就像给你自己的样式起了一个名字,后面的类型就是你的控件类型。紧接着在mainWindow.xaml.cs页面里面使用自己...
2019-07-11 15:08:43
184
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人