自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 资源 (1)
  • 收藏
  • 关注

原创 Linux ext2文件系统

硬盘  在一个硬盘在Linux下,被虚拟成文件。在/dev目录下,实体机是/dev/sd[a-p],虚拟机下是/dev/vd[a-d]。总体来说第一个硬盘被虚拟的文件总体来为/dev/sd[a-p][1-128]。(不过我的虚拟机下的,/dev目录下的文件是/dev/sda)。   硬盘是由分区和磁臂构成。每次写入数据的时候,磁臂旋转到相应的磁道上,对其读写数据。   何为分区呢?列如我的

2017-10-24 19:18:04 463

原创 斐波那契数列 logn

分析  我们都知道常规解法这个数列存在这个等式 , F(n) = F(n-1) + F(n-2) , 我们通过递归的时间复杂度是 2的n 次方,通过迭代时间复杂度是 O(n)。   可是这个菲薄那切数列里面还有一个数学规律,应用这个规律我们可以把时间复杂度降到 logn 。做法  F(n) = F(n-1) + F(n-2) 可以看出这个是一个递推数列,通过这个递推数列,我们必定可以用矩阵把这个递

2017-10-31 14:29:26 1282

原创 快速幂logn的算法

思路  我们思考下,一个无符号整数42亿 , 给它去对数 , 结果是不是32 . 那么我们可以看出来本身一个数字的二进制表示其实就是对这个数字取log2n, 这个log2n其实这是这个二进制数字的位数.   在思考下, 4 取以2为底的对数,答案是2,4的二进制位有2位,8同理三位.   那么,我们求p的m次方,是不是可以转换为求m的那些二进制为1,取这些二进制位为1的值的p次方,最终把所有二

2017-10-31 10:12:38 692

原创 LeetCode - Longest Palindromic Substring

题目描述给你一个字符串,找最大回文子串。 ababa , 答案就是 ababa abcbc , 答案就是 cbc 回文字符串就是从头读到尾和从尾读到头都是一样的。分析  我是这样子处理的,把字符串中,从前往后的顺序,定义一个下标pos ,pos从0到size-1。   pos为该子串的头部。然后从后往前面逆序遍历,如果那个字符跟pos处的子串相等,那么开始进入一个函数判断这个字符串是不是回

2017-10-29 12:26:56 211

原创 求当前数组中,最大值减最小值等于sum的数组个数

分析  应用双端队列,构造一个可以动态的求出当前数组最大值的容器,qmax。同上在构造一个qmin。   从left,right等于开始,如果当前区间的qmax-qmin符合条件,right向右扩充,当不符合条件时,计算上一步符合条件的所有子数组个数。个数公式为 left-right。   计算公式是因为当前数组符合条件,那么当前问题的所有子数组肯定也符合条件。因为当前数组当减少一个元素,子数组

2017-10-27 15:07:50 398

原创 滑动窗口的最大值

题目描述给一个滑动窗口的大小为W,先给你一个数组大小为N。现在滑动窗口一直滑动一直到末尾,求其次向右滑动时的最大值。分析常规思路每次遍历一遍当前窗口,保存其中最大值。然后继续把窗口向右移动,最终做出答案。时间复杂度 O(N*W)。优化用一个双端队列,用它保存过程中的最大值不再每次遍历窗口。 具体这样的: 当队列为空 1.数组的下标 i尾插进去 。 当队列不为空 1.队尾元素对应的数大于下标

2017-10-27 11:20:08 217

原创 SIGCLD语义

systemv SIGCLD语义虽然SIGCLD默认处理动作是忽略,但是当我们通过signal函数将 SIGCLD显示设为SIG_IGN,该进程的子进程不在保留最终状态,故该进程的子进程将不产生僵尸进程。当我们为SIGCLD注册自定义函数时,如果有终止子进程,系统会立即检查是否有终止的子进程等待被wait,即使当前pending表中没有SIGCLD,也会立即执行SIGCLD的处理函数。SIGC

2017-10-26 19:30:25 478

原创 Linux-信号

信号信号是为了操作系统能控制进程正确的运行而产生的一种机制。通常进程产生信号有四种方式。 1 由键盘特殊的组合按键产生,该方式产生的信号发送给一个控制终端的前台作业。 2 由系统调用接口或者命令发出一个信号。(列如kill 命令,abort—异常终止信号) 3 由进程自身错误操作产生的异常导致的信号 4 软件条件产生的信号(列如 alarm , 还有管道中的S

2017-10-26 13:49:50 292

原创 求最大子矩阵的大小

题目描述给你一个矩阵,这个矩阵的值不是0就是1,现在让你求出由1构成的矩阵,最大面积是多少?分析 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1如上就是这个图,这个答案是9。但是怎么用函数求出呢?  思路是这样的我们,

2017-10-26 13:31:06 474

原创 构造Maxtree

题目描述先给你一个数组,每个元素都不重复出现,让你构造一课二叉树,这个二叉树满足,父节点值比子节点值大。要求时间复杂度O(N) 空间复杂度 O(N)分析  它虽然很像堆,但堆的时间复杂度构造的是nlog2n,所以不行。   我们方法是这样的,遍历这个数组,找到每一个数左边第一个最大的和右边第一个最大的,选择它们俩个中较小的那个数。如果左边或右边没有,那么就选择有的那个,如果都没有则这个数肯定是最大

2017-10-25 11:51:06 299

原创 Linux 下 /usr/lib和 /usr/local和 /var

/var存放系统运行时的一些变更数据/usr/lib 用户编写程序默认路径库就在这个目录下(usr 指unix software source)/usr/local 一般存放用户自己下载的一些工具/bin 存放基本指令的程序(命令上的除了内建命令之外,所有普通指令都是程序)/usr/bin 用户后期安装的一些软件,如g++/gdb什么的。

2017-10-24 11:04:13 1720

原创 Linux /proc 目录

首先/proc 它是一个文件系统,一个虚拟文件系统。它

2017-10-24 00:40:45 254

原创 gdb 7.10.1(最新版) 编译安装

虽然现在gdb 8.0最新版,但是编译安装的原来大致一样1 wget http://ftp.gnu.org/gnu/gdb/gdb-7.10.tar.gz ./2 tar -zxvf gdb-7.10.tar.gz3 cd gdb-7.10.tar.gz4 ./configure5 make6 make install7 然后把安装路径下的gdb程序替换到Bash指定的默认路径下即可

2017-10-23 23:58:58 1872

原创 gcc 7.2编译安装

1 wget http://mirrors-usa.go-parts.com/gcc/releases/gcc-7.2.0/gcc-7.2.0.tar.gz 先下载安装包2 tar -zxvf gcc-7.2.0.tar.gz3 cd gcc-7.2.04 ./contrib/download_prerequisites 自动安装依赖库5 ./configure

2017-10-23 23:43:03 2347

原创 Linux下 标准I/O库的FILE对象结构体定义

struct _IO_FILE { int _flags; /* High-order word is _IO_MAGIC; rest is flags. */ #define _IO_file_flags _flags /* The following pointers correspond to the C++ streambuf prot...

2017-10-23 18:17:27 1063

原创 汉诺塔问题

该问题描述大致上这种题,都是有3座塔。Left , mid ,right 这三个塔。假设Left塔有n个盘子,盘子是从1到n的,1放在2上面,2放在3上面,依次类推,小盘子不能放到大盘子下面,现在我们需要把所有的Left塔的盘子移动到最右边,现在求最优的移动轨迹分析如果,我们要把n个盘子移动到right,需要做三步。 1.我们需要先把 1~i-1的盘子先移动到mid 2.把第i个盘子从Left移

2017-10-23 14:01:28 563

原创 堆之C++实现

#ifndef HEAP_H#define HEAP_Htemplate<class T>struct Less{ bool operator()(const T & left , const T & right) { return left < right; }};template<class T>struct Greater { boo

2017-10-22 19:23:50 164

原创 Huffman文件压缩之文件夹压缩

思路  应用huffman是带权路径最小二叉树这个性质,完成的文件压缩。我们可以应用这个性质。让一个文件中,每个字符出现的次数作为权值。这样离根节点越近的节点,它的字符出现的次数就越多。然后根据这个节点在父节点左,有效编码为0,在右,有效编码为1,从跟遍历到该节点,得到相应的huffman编码,然后用huffman编码去替代该文件中该字符得而实现压缩。   其实上面说的是字符,我们不应该单单把它

2017-10-22 17:37:59 625

原创 AVL树

以下图的平衡因子统一为左子树高度减去右子树高度。附上:单个节点声明的代码struct AVLTreeNode{ AVLTreeNode(const K& key, const V& value) : _pLeft(NULL) , _pRight(NULL) , _pParent(NULL) , _key(key) , _value(value)

2017-10-21 23:30:29 225

原创 Linux 软/硬链接

软链接  软链接首先是一个符号文件,它的inode号与被链接文件的inode号不同。软链接文件的大小与它被链接对象的名字有关,被链接文件的名字有几个字符,软链接文件大小就多大,它就行windows下的快捷方式。eg abc -> b 则大小为1字节   软链接的列子,我们进在跑的一个进程,我们可以在/proc目录,根据正在跑的进程的一个pid号,找到一个相应的目录,该目录有个叫为 cwd 的一

2017-10-20 15:53:55 408

原创 Linux的创建文件/目录中的权限参数mode

mkdir/creat/openmode参数是指创建文件时需要创建出什么权限的文件,我原本以为这个跟chmod 这种指令的mode指的同一个东西。777 ,666什么的直接设置 user/group/other的权限,但是我试了结果创建出来的权限很奇怪。 再查找了相关资料后发现。如果不用宏的话。用数字快捷创建时。 分5个模块跟chmod设置权限的方式很相似。 第一个模块是否设置用户ID (0代

2017-10-17 13:36:10 1686 1

原创 范围for 循环的坑

char buff[1024] = "Hello world";for(auto & i : buff ){ upper(i);}列入上面这个列子,当我们不得不使用 C语言风格的字符串时,潜意识会认为,范围for 应该遍历到 \0 就停止,但是很可惜的是不是的。它遍历到buff[1023]就当前列子说,所以当范围for 对象是一个C风格的字符串时,我们不能依赖 \0作为结束。

2017-10-14 17:14:54 264

原创 函数重载

Const运算符重载函数每个类都需要重载自己的运算符,这样该类的对象才能使用相应的运算符。对于运算符重载函数来说,参数个数就是该运算符接受的运算对象的个数,这个大家都是知道的。 对于const修饰运算符重载函数这是至关重要的, object operator + (const object &amp;amp;amp;amp;) const ; 修饰函数的这个const其实修饰的是this指针。this指针从,obj...

2017-10-13 16:13:21 1571

原创 c++类型推导

类型推导现代c++类型推演分为三个,一个为模板函数的形参推演。一个为auto的形参推演。一个decltype的类型推导。auto的类型推导是以模板函数的类型推导为基础的。模板函数类型推导推导过程模板函数的类型推导,是通过调用表达式即实参的类型与模板函数相应的形参类型一 一匹配以此来推导出模板参数类型。template<typename T>void f(ParamType param);f(e

2017-10-09 21:19:29 1921

原创 左值、右值、变量类型

一个变量在表达式中是代表左值还是右值,可以直接对该变量取地址,如果可以取地址,则该变量当前代表左值否则代表右值。 这点是很重要的,一个变量当前代表左值还是右值是于当前变量的类型无关的。class Widget {public: Widget(Widget&&object) };如上面这个列子,虽然object是一个右值引用,但是我们可以取object对象的地址,所以object代表的是一

2017-10-09 19:25:55 387

原创 斐波那契数列变形之青蛙跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?分析这个题目从一个青蛙可以跳上1级台阶,也可以跳上2级台阶这句话就可以看出一个青蛙要最终达到n的台阶,必定是从n-2级的台阶一次跳2级或者从n-1级的台阶一次跳一级跳上来。所以到达n级的台阶方法数等于n-2级与n-1级的方法数之和。代码 int jumpFloor(int number) {

2017-10-07 13:58:37 487

空空如也

空空如也

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

TA关注的人

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