自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 【匿名通信】在Linux环境下编译运行tor源码

参考原文 在Linux环境下编译运行tor源码

2018-10-11 11:33:13 492

原创 牛客网 《剑指Offer》编程 30.连续子数组最大和

题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序...

2018-10-07 21:17:49 167

原创 牛客网《剑指Offer》编程 29. 最小的k个元素 (使用堆)

题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。解题思路本题可以构建一个size为k的最大堆进行求解。遍历数组。当堆中元素总量小于k的时候,将当前元素放入堆;当堆中元素总量等于k的时候,将当前元素与堆顶的元素比较。如果比最大的元素大,淘汰当前元素;如果比对顶元素小,对顶元素出堆,并将当前元素插...

2018-10-07 14:58:46 148

原创 《程序员的自我修养》第三章 目标文件里有什么

在PC端的可执行文件,主要是linux下的ELF(Executable Linkable Format)文件和windows下的PE文件。一般c语言执行代码都保存在.text段上,已经初始化的全局变量或者局部静态变量保存在.data段上。未初始化的全局变量和局部静态变量保存在.bss段上。.rodata代码段存放的是只读数据。ELF结构:头文件(ELF文件的描述信息),段表(描述了每个段的...

2018-10-07 12:54:04 175

原创 牛客网《剑指Offer》 编程 29.最小的k个数(使用c++提供的set或者multiset)

题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。解题思路此次使用不改变原数组的方法。使用c++STL中的set或者multiset来实现。这两个模板底层的实现都是红黑树。即平衡的二叉搜索树。以下是对set和multiset的简单介绍:STL 说明 set<T> 按照从小到大...

2018-10-06 22:17:19 337

原创 《Linux程序设计》第四章 (临时文件、用户信息、主机信息、日志、资源和限制)

1.临时文件程序有的时候会使用一些中间文件存储某些中间计算结果,最后在将这些文件删掉。这样的文件成为临时文件。 tmpnam函数可以生成一个唯一的临时文件名。函数原型如下: #include <stdio.h> char* tmpnam(char *s);//返回一个唯一的文件名。 FILE* tmpfile(void);//该函数指向唯一的临时文件,以读写的方式打开。当对...

2018-10-06 19:52:07 195

原创 牛客网《剑指Offer》编程 29.最小的k个数 (解法1,需要改变原数组)

题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。解题思路由于快速排序每次能够把一个数放置在正确的位置上。因此,我们可以使用快速排序的Partition函数,对数组进行排序,直到第k个数被放在数组中第k个位置上为止。此时第k个数的左边都是比它小的数,右边都是比它大的数。最后输出前k个数就可以了。使用快速...

2018-10-05 18:06:31 173

原创 牛客网《剑指Offer》编程 28.数组中出现的超过一半的数字

题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。解题思路(1)用map统计每一个数的频率,当频率超过一半+1的时候停止统计,该数即为超过一半的数字。代码实现(1)int MoreThanHalfNum_Sol...

2018-10-05 16:05:54 150

原创 《Linux程序设计》第四章(程序参数、环境变量、时间和日期)

1.程序参数:C语言编写的linux或者unix程序的入口是main函数。该函数声明如下:int main(int argc,char* argv[]);其中argc代表参数个数,argv是一个字符串数组。参数个数包括程序名自身,argv数组的第一个元素是argv[0]。命令行参数在向程序传递信息方面很有用。可以使用短横线(-)开头的命令行参数来设置标志或者开关。有的时候还会使用+来表示和-...

2018-10-05 11:00:42 342

原创 《Linux程序设计》第三章 (错误处理)

函数在失败的时候,会设置errno变量的值来指明失败的原因。程序必须在报告错之后立刻检查errno变量,不然会被覆盖掉。1.strerror函数把错误代码映射为一个字符串,该字符串对发生的错误类型进行说明。函数原型如下: #include <string.h> char *strerror(int errnum); 2.perror函数把errno变量中报告的当前错误映射到一...

2018-10-04 10:58:58 144

原创 《Linux程序设计》第三章(标准IO库、格式化输入输出、文件和目录的维护、扫描目录)

标准IO库在启动程序时,有三个文件流是自动打开的,分别是stdin,stdout,stderr。 1. fopen函数:用于文件和终端的输入和输出。函数原型如下: #include <stdio.h>FILE *fopen(const char* filename,const char *mode); mode 有几种形式。需要注意的是,filename和mode...

2018-10-04 10:06:28 231

原创 《Linux程序设计》第三章 (系统调用)

许多Linux的shell都允许用户接入自己家的目录,使用cd ~ usr(usr是用户名)命令即可。但是标准库函数不能够理解shell中的~符号。所以必须在自己的程序中使用文件名。Linux中比较重要的三个设备文件:/dev/console:系统控制台;/dev/tty:控制终端;/dev/null:空设备。为了向用户提供统一的接口,设备驱动封装了所有与硬件相关的特性。硬件的特有功能通常...

2018-10-02 22:41:21 247

原创 《Linux程序设计》第二章

 shell是操作系统与用户间的接口程序。1.管道和重定向重定向输出:ls -l > lsoutput.txt#将ls的输出输出到lsoutput.txt文件中ps >> lsoutput.txt#将ps的输出追加到lsoutput.txt文件后面kill -HUP 1234 >killout.txt 2>killerr.txt #将进程的标准输...

2018-10-01 16:35:40 290

原创 【FreeNOS学习笔记】FreeNOS安装手册

笔者操作系统为Ubuntu16.04,按照官网给的教程结合在网上找到的大家一起踩过的坑,总结出如下安装手册。基本思路是在Ubuntu16.04上安装虚拟机qemu,在虚拟机上跑FreeNOS。参考博客为:FreeNOS初探索 FreeNOS学习,在Ubuntu16.04的64位计算机上编译32位汇编文件,在SConstruct中添加编译选项 FreeNOS学习笔记官网安装手册为:官网...

2018-09-29 11:57:30 1838 1

转载 ubuntu 按键上下左右出现ABCD的解决方法

错误问题:vi上下左右键显示为ABCD的问题解决方法: 只要依次执行以下两个命令即可完美解决Ubuntu下vi编辑器方向键变字母的问题。  一.执行命令 sudo apt-get remove vim-common  二.执行命令 sudo apt-get install vim原博文地址:https://blog.csdn.net/yf210yf/article/detail...

2018-09-28 21:17:12 4642 3

原创 《Linux程序设计》第一章

1.库函数库是一组预先编译好的函数集合。标准库文件存储在/lib或者/usr/lib目录中。.a的是静态库,.so是共享库。使用某个静态库的某个函数,只需要包含该静态库的头文件。静态库也成为归档文件,ar工具可以创建任何文件的归档文件。ar crv libfoo.a free.o bill.o //将编译过的free.o和bill.o归档成为libfoo.a文件静态库的缺点是,当用户...

2018-09-27 21:10:18 140

原创 《程序员的自我修养》第二章 链接 装载与库

gcc hello.c 执行时其实分成了四个步骤:预处理,编译,汇编,链接。1. 预处理(预编译)现在有程序hello.c,预处理生成.i文件。linux中预处理.c文件生成.i文件的指令如下:(两条中的任何一条都可以)$gcc -E hello.c -o hello.i$cpp hello.c > hello.i预处理主要处理以#开头的预编译指令。处理#includ...

2018-09-24 22:22:11 383

转载 【Linux基础知识】Ubuntu 16.04 更换源

原博客见https://www.cnblogs.com/dtiove/p/5917263.html一:问题概述      ubuntu,我们在使用apt新装软件的时候,会使用官方的网站去下载软件,但是会因为国内的转接点太多,而导致下载的速度非常慢 ,我们可以通过换成一些中间的节点来进行下载,比如阿里源,中科大源,清华源等等,这样的网站,他们会定时和官方的源进行同步和更新,而我们直接同步他们...

2018-09-24 21:44:21 1081

原创 牛客网《剑指Offer》编程 26.二叉搜索树与双向链表

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路二叉搜索树的特点是按照中序遍历的话,结果就会是一个从小到大排序的数组。所以使用一个指针指向刚遍历过的节点,另一个指针指向当前节点。采用递归遍历的方式。如果当前节点不为空节点,则将当前节点的左节点指向刚遍历过的节点;如果刚遍历过的节点不为空,则...

2018-09-24 17:26:13 202

原创 牛客网《剑指Offer》 编程 25.复杂链表的复制 (最优解法)

题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)解题思路这次使用时间复杂度为O(n),空间复杂度为O(1)的算法。首先,在原链表的每个节点后面复制相应的链表节点,即复制next域。然后,复制random...

2018-09-24 10:38:16 157

原创 牛客网《剑指Offer》编程 25.复杂链表的复制(优化的暴力法)

题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)解题思路这次试用优化之后的暴力法解题。首先 遍历一次原链表,这次只复制next域。同时将原链表与复制链表中节点的一一对应关系,存储在map中。比如原链表中的节点为...

2018-09-23 22:49:34 130

原创 牛客网 《剑指Offer》 编程 25.复杂链表的复制(暴力解法)

题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)解题思路最简单的是使用暴力解法。本题的数据结构:节点有三个部分组成:label域存数值,next域存该节点的下一个节点地址,random域存该节点随便指向的一个节...

2018-09-23 21:33:58 525

原创 牛客网《剑指Offer》编程 24.二叉树中和为某一值的路径

题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)。解题思路由于最后要得到从根到叶子节点的路径,因此使用二叉树的前序遍历算法。将当前节点值加入sum中,并且将当前节点加入路径中。如果sum值恰好等于要求的和,且该节点为叶...

2018-09-23 11:32:06 158

原创 牛客网《剑指Offer》 编程 23. 二叉树的后序遍历序列

题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解题思路二叉搜索树的特点:后序遍历的时候最后一个数是根节点。前面的数分为两个部分,本别是左子树部分和右子树部分。左子树不部分的所有数都比根节点小;右子树部分的所有数都比根节点大。因此可以这样判定:如果该二叉树空树,则返回false;...

2018-09-22 11:11:53 143

原创 牛客网《剑指Offer》 编程 22. 从上往下打印二叉树

题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。解题思路设置一个队列。先将根节点入队。当队列不为空的时候,       如果队首节点的左子树不为空,则将左子树入队。如果右子树不为空,将右子树入队。      将队首元素的val域放入vector中。队首元素出队。最后返回vector。代码实现/*struct TreeNode { int va...

2018-09-20 22:14:17 137

原创 牛客网《剑指Offer》 编程 21.栈的压入、弹出序列

题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)。解题思路需要设置一个辅助栈。测试某个序列是否是一个出栈序列,可以通过测试原序...

2018-09-20 21:28:21 144

原创 牛客网 《剑指Offer》编程 20.包含min函数的栈

题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。基本思路第一种思路:在数值入栈的时候记录最小值。最后返回最小值即可。但是如果最小值弹出了,不能返回第二小的值,所以没什么用。第二种思路:元素正常入主栈。使用一个辅助栈,在入栈时,如果辅助栈为空或者当前元素的值小于辅助栈栈顶值,则将当前元素压入辅助栈;如果辅助站不为空...

2018-09-19 21:11:23 96

原创 牛客网《剑指Offer》 编程 18. 二叉树的镜像

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

2018-09-19 09:19:46 111

原创 牛客网《剑指Offer》编程 17.树的子结构

题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)。解题思路判断一棵树是不是另一棵树的子结构,并不是判断是不是另一棵树的子树。pRoot1树是原树,pRoot2树是待判断的树。在这里我们可以分两步进行。外层函数实现:首先在pRoot1树中找到和pRoot2树根节点值相同的子树。内层函数实现:在找到与pRoot2根节点值相同的子树之...

2018-09-19 09:14:45 140

原创 《C++ primer》第七章

1. 类如何调用其成员函数?Sale_data是一个类,total是类的实体对象,Sale_data中有成员函数isbn。那么Sale_data在调用isbn成员时传入了total的地址。isbn函数有一个隐式参数this,我们调用isbn这个成员函数时,用请求该函数的对象地址初始化this。2.类的作用域和成员函数:在类中,如果成员变量在成员函数之后定义,成员函数也是可以使用该成员变量的...

2018-09-17 22:29:03 171

原创 《c++ primer》第二章 const限定符

1.const对象的初始化:有时我们希望定义这样一种变量,它的值不能够被改变。此时我们可以用const限定符。由于const对象一旦创建之后值不能够再改变,因此const对象必须初始化。如果用一个对象去初始化另一个对象,那么它们是不是const都无所谓。2.默认状态下,const对象仅在文件内有效。但如果希望别的文件都能够引用该const对象,那么对于const变量不管声明还是定义都添加ext...

2018-09-15 21:31:15 142

原创 《c++ primer》第二章 引用与指针

引用,指针1.引用(reference)当我们使用术语“引用”时,我们所指的一般是左值引用。引用是对象的另一个名字。一般初始化变量时,初始值将被拷贝到新建对象中。但是定义引用时,程序会将它和初始值绑定在一起,而不是将初始值拷贝给它。除了两种情况外,其余情况下引用的类型要严格匹配其对象类型。2.指针(pointer)指针本身就是一个对象,允许对指针赋值和拷贝。指针无需在定义时赋初值。...

2018-09-15 09:46:18 182

原创 牛客网《剑指Offer》编程 16. 合并两个有序链表

 题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。基本思路设置一个头结点newHead,newHead初始化乘两个链表中头结点较小的节点。当第一个链表中的节点值小于等于第二个时,                      将newHead指向第一个链表节点;                      调整正newHea...

2018-09-12 22:52:24 246

原创 牛客网《剑指Offer》 编程 15.反转链表

题目描述输入一个链表,反转链表后,输出新链表的表头。基本思路把链表里的节点先压栈,然后弹栈。代码实现/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: List...

2018-09-12 22:25:58 110

原创 牛客网《剑指Offer》编程 14.链表中倒数第k个节点

题目描述输入一个链表,输出该链表中倒数第k个结点。解题思路用快慢指针。快指针超前慢指针k个节点,然后和慢指针一起移动,最后当快指针指向空的时候,慢指针指的刚好是链表中导数第k个元素。代码实现/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL...

2018-09-12 22:21:05 152

原创 牛客网《剑指Offer》编程 13.调整数组使得奇数位于偶数前面

题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。基本思路将奇数放在偶数前面可以用冒泡排序法。把奇数冒泡到前面的时候,偶数自然就在后面了。i 之前的元素为奇数;当arr[j]为奇数且arr[j-1]为偶数时,交换arr[j]和arr[j+1]。或者存放入...

2018-09-11 23:06:26 112

原创 牛客网《剑指Offer》 编程 12.数值的整数次方

题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。解题思路一般情况下都能够想到的代码是double normalPower(double base,int exponent){ double result=1.0; for(int i=1;i<=exponent;i++){...

2018-09-10 09:10:15 150

原创 牛客网《剑指Offer》 编程 11.二进制中1的个数

题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解题思路使用位运算。设置变量flag=1,设置计数器cnt记录1的个数。当flag!=0的时候:    每次将flag和该数按位与。如果按位与结果为1,cnt++。    flag向左移动一位。代码实现int NumberOf1(int n) { unsigned flag...

2018-09-09 16:04:05 106

原创 牛客网《剑指Offer》编程 10.矩形覆盖

题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?解题思路同斐波那契数列。代码实现int rectCover(int number) { if(number==1){return 1;} else if(number==2){return 2;} ...

2018-09-09 15:53:58 156

原创 牛客网《剑指Offer》编程 9.变态跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路由 f(n-1) = f(n-2) + f(n-3) + … + 1f(n) = f(n-1) + f(n-2) +f(n-3) … + 1归纳出:f(n)=f(n-1)+f(n-1)=2*f(n-1)代码实现int jumpFloor...

2018-09-09 15:52:03 138

空空如也

空空如也

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

TA关注的人

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