自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Erick Lv的笔记

所有的博客仅作为个人笔记

  • 博客(27)
  • 资源 (4)
  • 收藏
  • 关注

原创 剑指offer之二叉树的镜像

题目描述题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义: 源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ ...

2018-09-29 21:10:27 104

原创 剑指offer之树的子结构

题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路该题目最重要的是理解子结构的含义,下面给出一个例子:图中 2 4 5 6这个树是同构的,这种情况特别容易被忽略掉,代码中已经着重标出来了。代码分为两个部分进行,HasSubtree函数是进行层次序遍历的函数,用于索引A树中的每个节点。对于索引到的每个节点,调用is_equal这个函数进...

2018-09-29 21:01:05 107

原创 剑指offer之合并有序链表

题目输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路归并的思路,注意不要开辟新的内存,直接在原来链表上合并,刚开始被这个坑了。。。。注意边界条件的判断。AC代码class Solution { public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { ...

2018-09-29 19:59:38 161

原创 剑指offer之翻转链表

题目输入一个链表,反转链表后,输出新链表的表头。思路水题,直接翻转即可,注意最后一步的链接AC代码class Solution { public: ListNode* ReverseList(ListNode* pHead) { if(pHead == nullptr) { return nullptr; } ...

2018-09-29 19:34:50 257

原创 剑指offer之链表中倒数第K个节点

题目描述输入一个链表,输出该链表中倒数第k个结点。解题思路之前的错误思路想要把链表翻转过了,结果超时GG了。。。。。正确的思路应该是双指针法!!!!第一个指针先走k-1步,第二个指针从头结点开始。两者同时开始走,当第一个走到结尾时,第二个就是倒数第k个节点。。。如果第一个直接是空指针,那么第二个就是倒数第k个。。。。WTF,还是做的题目少,没有有关的思路啊。。。。AC代码代码一定要注意...

2018-09-24 20:58:52 171

原创 剑指offer之使数组的奇数在偶数前面

题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路归并排序相对顺序不变性的特点,复杂度O(log⁡2N)O(\log_{2}^{N})O(log2N​),需要注意的是,比较时需要控制的不是大小,而是奇偶性。C++自带的库函数std::stable_sort有这个功...

2018-09-24 19:53:10 91

原创 剑指offer之二进制中1的个数

问题描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路描述直接利用计算自带的转换方式,unsigned可以把负数转换成原码,其余的就是正常求解了。AC代码class Solution { public: int NumberOf1(int n) { unsigned num = n, sum = 0; while(num...

2018-09-24 19:39:21 120

原创 剑指offer之矩形覆盖问题

问题描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?求解思路同样是斐波那契的数列的思路,本质上是动态规划。n<=0时,结果为零,这是下界条件。n==1时,只有竖着一种覆盖方式。n==2时,有并排横着和并排竖着两种方式。假设n步的情况下有f(n)f(n)f(n)种方式,那么如果前一个状态是只差了一个...

2018-09-23 20:58:49 119

原创 剑指offer之变态跳台阶

问题描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。求解思路该题目肯定不能用递归求解和组合路径的方式。结合前一个题目的斐波那契思想,我们需要写出递推表达式:假设f(n)f(n)f(n)是走到第nnn个台阶花费的步数,那么前一个台阶号总共有n−1n-1n−1中可能(1)f(n)=f(n−1)+f(n−2)+⋯+f(2...

2018-09-23 20:07:55 309

原创 剑指offer之青蛙跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。求解思路刚开始是想要通过递归模拟求解,结果超时了。但是这样肯定能求出解来,不过计算了大量重复的代码,复杂度应该是指数级的。正确的思路应该是:先计算出最多能放几个2步,假设是n个i从1到n,计算i个2步的情况下步法的组合数,所有组合数累加到sum上sum+1是最...

2018-09-23 19:24:00 260

原创 剑指offer之斐波那契数列

水题#include <bits/stdc++.h>using namespace std;class Solution { public: int Fibonacci(int n) { int a = 1, b = 1; if(n == 0) { return 0; } if(...

2018-09-23 16:58:17 112

原创 C++全特化与偏特化

全特化全特化一般用于处理有特殊要求的类或者函数,此时的泛型模板无法处理这种情况。#include <iostream>#include <cstring>using namespace std;template<typename T>class A { public: bool cmp(const T &t1, const T ...

2018-09-23 15:10:23 5929

原创 C++左值与右值,移动与完美转发

左值与右值判别:左值:用来存储数据的变量,有实际的内存地址,表达式结束后任然存在。右值:匿名的临时变量,表达式结束时被销毁,不能存放数据,可以被修改或者不修改;字面常量也是右值。int x=10;int* p=&++x; // 正确,前置++返回左值int* q=&x++; // 错误,后置++返回临时对象左值引用就是普通的引用,下面介绍右值引用:#inc...

2018-09-23 11:14:02 587

原创 C++智能指针与动态内存分配

智能指针一般有三种智能智能指针:std::shared_ptr、std::unique_ptr和std::wek_ptr。std::shared_ptr允许多个指针共享内存对象,std::unique_ptr只允许一个指针独占内存对象,std::wek_ptr与std::shared_ptr配合使用,一般用于防止循环引用无法释放内存的问题。三者都在memory库中shared_ptr 类型模...

2018-09-22 15:28:40 2582 1

原创 剑指offer之旋转数组的最小数字

题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解题思路最开始想到了直接搜索,这样的时间复杂度是O(N)O(N)O(N),不是最好的方法。真正好的方法是借助与...

2018-09-21 22:09:03 75

原创 Ubuntu 18.04安装codeblocks 17-12

sudo add-apt-repository ppa:pasgui/ppasudo apt-get updatesudo apt-get install codeblockssudo apt-get install codeblocks-contrib

2018-09-21 14:58:18 4221

原创 剑指offer两个栈来实现一个队列

题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路一个水题,不过有一个坑:我们假设stack1是输入用的,stack2是输出用的,必须是stack2是空的时候才能把所有stack1的数据放入stack2中!AC代码#include <iostream>#include <stack>#include <vec...

2018-09-20 22:21:42 66

原创 C++泛型算法初步

C++的泛型算法永远不会执行容器的操作,这些算法只是在迭代器上进行操作。编程假定是算法永远不会改变容器的大小,不会直接添加和删除元素。算法操作的是一组迭代器的范围。初识泛型算法标准算法库都是对一个范围内的元素进行操作,一般都要输入要操作的区间。只读算法只读取输入范围的值,不改变任何数据。一般使用cbegin()和cend()进行返回确定。常用的有:find() :查找count()...

2018-09-20 15:16:06 376

原创 C++面向对象机制

基类和派生类基类中使用virtual声明函数,显示的说明这是可以进行重载的。子类中在函数的最后添加上override关键字显示的说明重载基类的函数,这是可选的。但是,如果不声明为虚函数,则解析发生在编译时,而不是运行时。这样会导致在声明为基类的引用或者指针时,只能调用基类的函数,即使此处使用了派生类,也无法进行运行时检验!virtual只需要在基类中声明一次即可,这样整个继承链中的子类都可以不...

2018-09-20 09:53:43 877

原创 剑指Offer之重建二叉树

问题描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路该题目用到了递归分治的思想。先序遍历二叉树的第一个节点肯定是根节点,那么在中序序列中找到先序的对应数据的下标。根据前序和中序遍历的性质可知,下...

2018-09-19 23:12:32 89

原创 剑指offer之数组中的数据查找

题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路刚开始想的是先从第一排中找到第一个比目标数大的数据的下标,然后对这个下标之前的数据进行按列的二分查找,这样的复杂度是O(Mlog⁡2N)O(M\log_{2}^{N})O(Mlog2N​...

2018-09-19 22:58:37 389

原创 C++容器,迭代器,容器的适配器

容器顺序容器主要靠下标和迭代器进行操作。顺序性的主要靠下标,链式的靠迭代器访问。包含了顺序型的容器和链式的容器。连续型的包括:vector:向量,可以快速扩展和删除元素,在队尾的操作有优势!deque:双端队列,可以快速的从队首和队尾添加或者删除元素,适合双向的操作。array:数组,大小必须是固定的。string:字符串链式的包括:list:双向链表forward_l...

2018-09-19 15:24:47 381

原创 Python实现A*算法解决N数码问题

Python实现了A*算法,解决N数码的问题

2018-09-19 09:07:59 13861 6

原创 Golang的socket一般使用方式

参考:https://astaxie.gitbooks.io/build-web-application-with-golang/zh/08.1.html客户端操作步骤: - 确定服务器的IP和端口号 - 建立TCP连接 - 向服务器发送请求 - 接收请求服务端操作步骤: - 确定监听的端口号 - 启动TCP监听 - 接收客户端的请求 - 返回数据(...

2018-09-12 20:45:57 1994

原创 Golang的cookie

一般的写入和读取就使用下面的方式:import ( "fmt" "net/http")func setCookueHandler(w http.ResponseWriter, r *http.Request) { c1 := http.Cookie{ Name: "first_cookie", Value: &qu

2018-09-11 22:01:43 1152

原创 Golang连接使用MySql5.7数据库完整步骤

创建数据库、用户以及修改密码在终端中输入命令,启动数据库:service mysql start以下是在MySql中执行的操作。 为防止修改系统的数据库,我们需要新建一个新的数据库:CREATE DATABASE test_db;切换到新建的数据库:use test_db;在该数据库中新建一个表单,其中uid是自动增长的主键:CREATE TABLE "use...

2018-09-11 11:50:52 2302

原创 MySql基本的操作

安装安装过程省略,直接从apt源安装即可,注意安装的时候记住密码。。server和client都安装了就行。登录,创建和删除用户首次登录MySql时,需要输入:sudo mysql -u root -p需要两次密码,分别是root的和mysql的。有一个mysql.user的表,该表存储了所有的用户。 输入命令:SELECT User, Host, plugin ...

2018-09-06 21:27:55 118

code reading

Coding Reading 英文原书,主要讲述了高效阅读源代码的方式。磨刀不误砍柴工,很有学习的价值

2018-06-07

BTree数据结构课程设计C++版

BTree数据结构课程设计C++版,完整的过程和C++源代码,包括算法的源代码等。C++代码可以直接运行。

2018-01-15

Effective Modern C++英文原书

Effective Modern C++英文原书,主要讲解了C++11/14的新特性,适合C++进阶阅读。英文资料,可以提高英文水平。Effective系列的经典书籍

2018-01-15

空空如也

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

TA关注的人

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