简短问题
ACHelloWorld
这个作者很懒,什么都没留下…
展开
-
从海量数据中查找一个数
题目:给出40亿个不重复的unsigned int的整数,没排过序,再给一个指定的数,判断这个数是否在那40亿个数 中存在? 方案一:申请512MB的内存,利用位图,一个bit代表一个unsigned int的值,读入这40亿个数,设置相应的位, 存在的设置为1,不存在的设置为0,然后我们只需要O(1)的复杂度查询即可。 方案二:因为是32位无符号整型数原创 2014-03-27 17:31:04 · 1038 阅读 · 0 评论 -
从运算符重载到指针悬挂
在Mayuyu讲解指针悬挂之前,先来简单讲一下运算符重载,因为一般情况下我们是通过重载赋值运算符来解决指针悬挂问题的。 我们知道,在C++中,编译时多态性是通过函数重载和运算符重载来实现的,也称为静态多态性。而运行时多态性是通过继承和虚函数来实现的,也称为动态多态性。那么我们先来看看什么是运算符重载。 我们都知道对于像"+","-","*","/",这样的运算符来说,进行运原创 2014-03-31 15:59:45 · 1046 阅读 · 0 评论 -
交叉编译
今天,Mayuyu来讲一个比较重要的概念,即交叉编译,主要分为如下几个方面来讲述。 Contents 1. 什么是交叉编译 ? 2. 为什么要使用交叉编译 ? 3. 交叉编译工具链 1. 什么是交叉编译 ? 所谓交叉编译,简单地来说就是在一个平台上编译生成另一个平台上的可执行代码。注意这里的平台实际上 包含两个概念,即体系结原创 2015-01-30 16:44:20 · 798 阅读 · 0 评论 -
关于char *file = "Mayuyu"要说的
今天Mayuyu在编程时遇到了一个简短的问题,就是在使用语句char *file = "Mayuyu"时会报警告。警告如下 好了,看到了这个,现在Mayuyu就来分析一下。 char *file = "Mayuyu"这个语句声明了一个指针,指向一块全局的const区域,const内存区当然不是你想改就改,如果你想通过指针file来修改的话,那会导致一个原创 2014-12-09 11:17:43 · 1271 阅读 · 0 评论 -
字符串删除问题
在计算机的世界了里,字符串问题可以说是一个很重要的问题,比如文本处理等等问题。今天Mayuyu就来讲述一个字符串删除问题,问题描述如下 问题:给定一个很长的字符串,比如长度为1000000,现在要删除这个字符串中某些指定的字符,这些指定的字符只 有几个,现在Mayuyu要求是尽量用最少的时间和空间来做这件事。 分析:很明显,可以从前往后扫描,遇到一个指定的字符就删原创 2015-01-01 14:26:19 · 1126 阅读 · 0 评论 -
为什么i++不能作为左值
今天Mayuyu带大家一起来搞清楚i++与++i的区别。或许你在C++编程中经常使用它们,但是却不知道它们背后的原理。同样Mayuyu也不知道,那么今天很有必要搞清楚它们。现在就让Mayuyu带领大家一起学习吧。。。 首先,说到i++于++i的区别,那么就先要了解它们的底层实现细节。下面是它们的实现代码 对于i++是int tmp; tmp = i; i =原创 2014-06-05 15:12:59 · 1848 阅读 · 0 评论 -
大O符号
今天,Mayuyu来讲一个东西,叫做大O符号,即Big O Notation。大O符号是用来描述函数渐进行为的数学符号,更准确地说,它是用另一个函数来描述一个函数数量级的渐进上界。 在数学中,它一般用来刻画被截断的无穷级数,尤其是渐进级数的剩余项。在计算机科学中,它在分析算法复杂性方面非常有用。 详细内容参考如下链接 链接:http://zh.wikipedia.org原创 2015-02-22 14:41:53 · 1324 阅读 · 0 评论 -
Boost C++库介绍
今天Mayuyu将来讲述一个非常实用的C++库,它叫做Boost C++库。Boost库中加入了一些在实战中非常常用的函数对C++标准进行了扩充,在实际开发中非常有用。 Boost C++的安装包可以在这里下载:http://www.boost.org/ 解压后进入目录执行:sh bootstrap.sh。完成后得到了b2可执行文件,继续执行./b2,最后执行./bjam完成安原创 2015-02-21 16:59:23 · 1178 阅读 · 0 评论 -
一道位运算技巧题
今天Mayuyu遇到一个非常有意思的题目,描述如下 题目:有一堆数,若干个数出现了3次,只有一个数出现了1次,找出只出现1次的那个数。 分析:把这个问题进行推广,得到如下描述 有一堆数,除了一个元素出现次外,其它每个数都出现了次,现在需要找出出现次的这个数。 代码:#include using namespace std;const int N原创 2015-02-22 18:25:23 · 954 阅读 · 0 评论 -
RTTI技术
在C++中通过虚函数,模板编程和RTTI技术可以实现多态。关于虚函数和模板编程不再赘述,下面来介绍RTTI技术。 所谓RTTI技术,是Run Time Type Infomation的缩写,即运行时类型信息。它提供了运行时确定对象类型的方法。对于大多数人而言,可能都不知道在C++中还有RTTI。其实在C++编程中有时候不可避免地需要对对象类型进行动态判断,那么如何确定对象的动态类型呢? 答原创 2015-03-03 22:27:05 · 2097 阅读 · 0 评论 -
模板元编程
模板元编程技术是一种元编程技术,编译器使用模板产生暂时性的源码,然后再和剩下的源码混合编译。在Wiki上是这么说的:http://zh.wikipedia.org/wiki/%E6%A8%A1%E6%9D%BF%E8%B6%85%E7%B7%A8%E7%A8%8B。 由于是在编译时执行,那么就需要编译时执行的操作,比如宏,typedef,const,enum等等。 下面是一个使用模原创 2015-03-04 13:25:00 · 784 阅读 · 0 评论 -
C++设计模式类库Loki介绍
Loki是由Andrei编写的一个与《Modern C++ Design》(C++设计新思维)一书配套发行的C++代码库。它不仅把C++模板的功能发挥到了极致,而且把类似设计模式这样思想层面的东西通过库来提供。 详细可以参考 1.http://blog.csdn.net/witch_soya/article/details/7612579 2.http://原创 2015-03-04 13:47:20 · 1371 阅读 · 0 评论 -
C++开源库介绍
今天来介绍一些C++的开源库,如下链接 链接:http://blog.csdn.net/chen19870707/article/details/40427645 种类比较多,比如并发方面的就有这么多 接下来主要介绍我会用到的两个,分别是Hashmap和sofia-ml。 先来介绍Hashmap吧!它是一个C++实现的开放哈希寻址方法。源码原创 2015-03-30 19:43:37 · 1171 阅读 · 0 评论 -
Cookie的介绍
Cookie是某些网站为了辨别用户身份而存在用户本地终端上的数据。Cookie总是保存在客户端中,可分为内存Cookie和硬盘Cookie,而按照时间划分,又可以分为非持久Cookie和持久Cookie。 Cookie的Wiki介绍:http://zh.wikipedia.org/wiki/Cookie Cookie机制详解:http://blog.csdn.net/fanga原创 2015-04-01 00:44:52 · 1043 阅读 · 0 评论 -
经典题目(二)
题目:2的29次方是一个9位数,在这个9位数中各个位上的数字都不一样,求0到9中哪一个数字没有出现过 ? 分析:由于,我们又知道一个数模9的余数等于这个数的所有位的数字之和模 9的余数,那么因为0到9的所有数字之和模9余0,而现在这个9位数模9余-4,说明缺少-4。 题目:证明素数有无穷多个 分析:利用反证法,假设素数有有穷多个,设最后一个素数为,那么我们原创 2014-04-12 19:28:34 · 1041 阅读 · 0 评论 -
经典题目(一)
Mayuyu最近遇到了一些很有趣的题目,现在就来和大家一起分享。。。 题目一:给定一个升序数组,如何在这个数组中快速找出两个数,其和等于一个给定的值。 分析:对于本问题最直观的想法就是枚举一个数找另一个数,这样时间复杂度为O(n^2)。嗯,不是我们想要的,需 要寻求更高级的算法。既然这个数组是有序的,实际上我们可以这样做,在这个数组的头尾设置两个指针,假 设原创 2014-04-08 21:04:10 · 857 阅读 · 0 评论 -
求两个有序数组的中位数
题目:给定两个有序数组,都是按照从小到大排好序,求它们合并后的中位数。 分析:在数据结构中我们学过,合并两个有序数组为一个有序数组的最好方法是归并排序。当然这只是归并排序的一个子操作,这样的时间复杂度为O(n)。实际上我们还有更好的方法,使时间复杂度缩短至。 这种快速的方法是这样的: (1)先来看看这两个有序数组长度都相等的情况 先来比较a[n/2]与b原创 2014-03-27 15:50:09 · 672 阅读 · 0 评论 -
内存对齐
今天Mayuyu意外地写了如下两段代码: 片段一:#include #include #include using namespace std;struct Node{ char a; int x; char b;};int main(){ cout<<sizeof(Node)<<endl; return 0;}片原创 2014-03-30 19:01:22 · 619 阅读 · 0 评论 -
求两个单向无环链表的第一个公共交点
题目描述:给定两个无环链表,长度分别为n和m,求它们的第一个交点。 分析:如果两个链表有公共节点,也就是说两个链表从某一点开始,它们的next指针都指向同一个节点,但由于是单向链表,那么每个节点都只有一个next指针,所以从第一个公共节点开始,之后它们所有的节点都是重合的,那么它们的拓扑形状就像Y字型。 既然这样,那么我们可以这样做,如果它们的尾节点相同,说明这两个链表是相原创 2014-03-27 13:27:10 · 1232 阅读 · 0 评论 -
反转链表
现在有一个难题,对于一个单向链表,Mayuyu想通过修改指针将它进行反转。 嗯,对于这个问题,我们只需要考虑链表中当前的节点与它的前驱和后继的指针指向情况就可以了。这样我们对于每一个当前的节点都做同样的操作,这样下去就可以修改所有的指针,把链表进行反转,时间复杂度为O(n)。 如上图,对于当前节点cur,我们必然要修改它的next指针,那么所以先把cur->next保原创 2014-03-30 16:21:54 · 608 阅读 · 0 评论 -
唯一出现两次的数字
今天Mayuyu遇到了一道很难的数学题,人家本来就不擅长数学嘛!!!在网友的帮助下,Mayuyu顺利解决了它。 Mayuyu问题是这样的: 给定一个长度为100000的整数数组,没有排过序,所有整数的范围均在int内,除了其中一个数字出现过2次 以外,其余的数字都出现过3次,现在要Mayuyu找出唯一出现过两次的这个数。要求时间在3000ms内 Ma原创 2014-03-30 20:39:53 · 1248 阅读 · 0 评论 -
判断两个单向链表是否存在环
今天Mayuyu来带领你们讨论如下三个问题: (1)如何判断一个单链表是否存在环 ? (2)如果存在环,如何找到环的入口点? (3)两个链表中有环时,如何判断相交? 问题一 我们设置两个指针,分别是fast和slow,初始都指向这个单向链表的表头,fast每次走两步,而slow每次走一步,所以,我们知道如果有环,那么fast先进入环,slow后进入环,在原创 2014-03-30 15:33:12 · 1109 阅读 · 0 评论 -
Mayuyu带你学虚基类
最近Mayuyu在学习C++,对Mayuyu来说C++还是很容易的,因为人家本来就冰雪聪明啊,哈哈!不开玩笑啦,进入正题。今天Mayuyu将会带领你们一起来学习虚基类。 那么,听到虚基类这个词,你的第一个反应就是什么是虚基类,为什么C++要引入它。那么现在可爱的Mayuyu将会给你详细探讨。 用五个字概括引入虚基类的目的:消除二义性。我们先来看一段代码:#include原创 2014-03-31 13:44:11 · 969 阅读 · 0 评论 -
define与typedef的区别
相信学过C语言的大部分人都知道define和typedef在功能上有很多相似的地方,但是它们有什么不同呢?现在Mayuyu将来一一告诉你。 首先define是编译预处理指令,其实它定义的变量是在编译预处理时进行简单的替换,不会作正确性检查,不管含义是否正确照样带入,只有在编译时已被展开的源程序才会发现可能的错误并报错。而typedef是在编译时处理的,它在自己的作用域内给原创 2014-04-03 20:45:57 · 756 阅读 · 0 评论 -
循环双向链表
今天Mayuyu要讲的是循环双向链表,其实循环双向链表对于单向链表来说,对于链表的遍历更方便了,既可以向前遍历,又可以向后遍历,缺点是占用空间比单向链表大。 现在Mayuyu来带领你们一步一步实现循环双向链表的基本操作。 (1)初始化循环双向链表 同单向链表一样,循环双向链表同样有一个头节点,它的每一个节点包含3个域,即prior,val,next,分 别指原创 2014-04-04 10:58:25 · 863 阅读 · 0 评论 -
指针函数与函数指针
今天Mayuyu将要讲的是指针函数和函数指针,听着怎么这么绕口?没错,这两个概念及容易搞混,现在Mayuyu就来给你讲讲它们的区别及用法。 (1)指针函数 从名字可以看出,它本质上是一个函数,这是一个返回值类型为指针的函数,比如:#include #include #include using namespace std;int *Find(int x)原创 2014-04-04 19:40:54 · 748 阅读 · 0 评论 -
char *p="Mayuyu"与char p[]="Mayuyu"的区别
今天Mayuyu将要探讨的是char *p="Mayuyu"和char p[]="Mayuyu"的区别。 我们知道以字符串形式出现的,编译器都会为这个字符串的末尾加上'\0',也就是说如果你的字符串是'Mayuyu',那么编译器实际上存储的是'Mayuyu\0'。首先,我们来讲讲char p[]="Mayuyu"的存储方式。 (1)char p[]="Mayuyu"原创 2014-04-08 13:17:41 · 1266 阅读 · 0 评论 -
malloc与new的区别
我们知道,malloc与free是C语言的标准库函数,而new与delete是C++的运算符,它们都可以用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用malloc和free无法满足动态对象的要求,对象在创建的同时要自动执行构造函数,在消亡之前要自动执行析构函数,由于malloc和free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强原创 2014-03-27 11:47:47 · 673 阅读 · 0 评论 -
关于static变量
关于static变量,我们有几点要知道的: (1)static全局变量与普通全局变量有什么区别? (2)static局部变量与普通局部变量有什么区别? (3)static函数与普通函数有什么区别? 下面我们一一来回答这三个问题 (1)对于第一个问题,我们知道在全局变量之前加上关键字static就成了静态的全局变量,全局变量本身就是静 态存储方式,而原创 2014-03-27 10:29:22 · 712 阅读 · 0 评论 -
libsvm的介绍和使用
svmlib是支持向量机的一种工具,用法可以参照下面的链接。链接:原创 2015-04-12 18:48:22 · 1070 阅读 · 0 评论