随笔分类 -  careercup

摘要:17.4 编写一个方法,找出两个数字中最大的那一个。不得使用if-else或其他比较运算符。解法:我们可以通过一步步的分析来将需要用到的if-else和比较操作符去掉:If a > b, return a; else, return b.If (a - b) using namespace std;... 阅读全文
posted @ 2014-12-11 22:04 Jessica程序猿 阅读(176) 评论(0) 推荐(0)
摘要:17.3写一个算法计算n的阶乘末尾0的个数?解答:首先,算出n的阶乘的结果再去计算末尾有多少个0这种方法是不可取的, 因为n的阶乘是一个非常大的数,分分种就会溢出。我们应当去分析, 是什么使n的阶乘结果末尾出现0。n阶乘末尾的0来自因子5和2相乘,5*2=10。因此,我们只需要计算n的阶乘里, 有多... 阅读全文
posted @ 2014-12-11 21:39 Jessica程序猿 阅读(270) 评论(0) 推荐(0)
摘要:17.2 设计一个算法,判断玩家是否赢了井字游戏。解法:假设这个检查某人是否赢得了井字游戏的函数为HasWon,那么我们第一步要向面试官确认, 这个函数是只调用一次,还是要多次频繁调用。如果是多次调用, 我们可以通过预处理来得到一个非常快速的版本。方法一:如果HasWon函数需要被频繁调用对于井字游... 阅读全文
posted @ 2014-12-11 21:04 Jessica程序猿 阅读(218) 评论(0) 推荐(0)
摘要:17.1 编写一个函数,不用临时变量,直接交换两函数。解法:方法一:这个是经典面试题,也相当直接。我们将用a0表示a的初值,b0表示b的初始值,用diff表示a0-b0的值。让我们将a>b的情形绘制在数轴上。首先,将a设为diff,即上面数轴的右边那一段。然后,b加上diff(并将结果保存在b中),... 阅读全文
posted @ 2014-12-11 20:03 Jessica程序猿 阅读(276) 评论(0) 推荐(0)
摘要:13.10 用C编写一个my2DALLoc函数,可分配二维数组。将malloc函数的调用次数降到最少,并确保可通过arr[i][j]访问该内存。解法:这道题目最简单的方法就是先开一个数组来存储指向每一行的指针, 然后再为每一行动态地分配空间。这是非常常见的动态申请二维数组空间的方法:int** My... 阅读全文
posted @ 2014-12-11 15:11 Jessica程序猿 阅读(182) 评论(0) 推荐(0)
摘要:13.9 编写支持对齐分配的malloc和free函数,分配内存时,malloc函数返回的地址必须都能被2的n次方整除。解法: 一般来说,使用malloc,我们控制不了分配的内存会在堆里哪个位置。我们只会得到一个指向内存块的指针,指针的起始地址不定。要克服这些限制条件,我们必须申请足够大的内存,要... 阅读全文
posted @ 2014-12-11 14:52 Jessica程序猿 阅读(136) 评论(0) 推荐(0)
摘要:13.8 编写一个智能指针类。智能指针是一种数据类型,一般用模板实现,模拟指针行为的同时还提供自动垃圾回收机制。它会自动记录SmartPointer对象的引用计数,一旦T类型对象的引用计数为零,就会释放该对象。解法:智能指针跟普通指针一样,但他借助自动化内存管理保证了安全性,避免了诸如悬挂指针、内存... 阅读全文
posted @ 2014-12-11 12:59 Jessica程序猿 阅读(221) 评论(0) 推荐(0)
摘要:13.7写一个函数,其中一个参数是指向Node结构的指针,返回传入数据结构的一份完全拷贝。 Node结构包含两个指针,指向另外两个Node。C++实现代码:typedef map NodeMap;Node* copy_recursive(Node *cur, NodeMap &nodeMap){ ... 阅读全文
posted @ 2014-12-11 11:38 Jessica程序猿 阅读(118) 评论(0) 推荐(0)
摘要:13.6 基类的析构函数为何要声明为virtual?解答:用对象指针来调用一个函数,有以下两种情况:如果是虚函数,会调用派生类中的版本。如果是非虚函数,会调用指针所指类型的实现版本。析构函数也会遵循以上两种情况,因为析构函数也是函数嘛,不要把它看得太特殊。 当对象出了作用域或是我们删除对象指针,析构... 阅读全文
posted @ 2014-12-09 23:10 Jessica程序猿 阅读(206) 评论(0) 推荐(0)
摘要:13.5谈谈C语言关键字”volatile”的意义(或重要性)?解答关键字volatile的作用是指示编译器,即使代码不对变量做任何改动,该变量的值仍可能被外界修改。操作系统、硬件或其他线程都可能修改该变量。该变量的值由可能遭受意料之外的修改,因此,每一次使用时,编译器都会重新从内存中获取这个值。v... 阅读全文
posted @ 2014-12-09 22:36 Jessica程序猿 阅读(205) 评论(0) 推荐(0)
摘要:13.4深拷贝和浅拷贝有什么区别,如何使用?解答浅拷贝并不复制数据,只复制指向数据的指针,因此是多个指针指向同一份数据。 深拷贝会复制原始数据,每个指针指向一份独立的数据。通过下面的代码, 可以清楚地看出它们的区别:struct Test{ char *ptr;};void shallow_c... 阅读全文
posted @ 2014-12-09 22:25 Jessica程序猿 阅读(145) 评论(0) 推荐(0)
摘要:13.3C++中的虚函数是如何工作的?解答虚函数依赖虚函数表进行工作。如果一个类中,有函数被关键词virtual进行修饰, 那么一个虚函数表就会被构建起来保存这个类中虚函数的地址。同时, 编译器会为这个类添加一个隐藏指针指向虚函数表。如果在派生类中没有重写虚函数, 那么,派生类中虚表存储的是父类虚函... 阅读全文
posted @ 2014-12-09 22:19 Jessica程序猿 阅读(169) 评论(0) 推荐(0)
摘要:13.2浅析哈希表和STL map。对比哈希表和STL map。哈希表是怎么实现的?如果输入数据规模不大, 我们可以使用什么数据结构来代替哈希表。解答对比哈希表和STL map在哈希表中,实值的存储位置由其键值对应的哈希函数值决定。因此, 存储在哈希表中的值是无序的。在哈希表中插入元素和查找元素的时... 阅读全文
posted @ 2014-12-09 22:15 Jessica程序猿 阅读(166) 评论(0) 推荐(0)
摘要:13.1 用C++写个方法,打印输出文件的最后K行。解答:一种方法是打开文件两次,第一次计算文件的行数N,第二次打开文件,跳过N-K行, 然后开始输出。如果文件很大,这种方法的时间开销会非常大。我们希望可以只打开文件一次,就可以输出文件中的最后k行。 我们可以开一个大小为k的字符串数组,然后将文件中... 阅读全文
posted @ 2014-12-09 21:52 Jessica程序猿 阅读(252) 评论(0) 推荐(0)
摘要:11.7 有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上。处于实际和美观的考虑,在上面的人要比下面的人矮一点、轻一点。已知马戏团每个人的高度和重量,请编写代码计算叠罗汉最多能叠几个人。如果要保持相对顺序不变,那么不能直接排序。C++实现代码:#include#includeusing... 阅读全文
posted @ 2014-12-09 20:40 Jessica程序猿 阅读(322) 评论(0) 推荐(0)
摘要:11.6 给定M*N矩阵,每一行、每一列都按升序排序,请编写代码找出某元素。类似leetcode:Search a 2D Matrix但是与leetcode中这题不同的是下一行的第一个元素不一定大于上一行的最后一个元素。所以使用二分查找有点麻烦。解法一:通过观察我们可知:若列的开头大于x,那么x位于... 阅读全文
posted @ 2014-12-09 17:17 Jessica程序猿 阅读(157) 评论(0) 推荐(0)
摘要:11.5 有个排序后的字符串数组,其中散布着一些空字符串,编写一个方法,找出给定字符串的位置。解法:如果没有那些空字符串,就可以直接使用二分查找法。比较待查找字符串str和数组的中间元素,然后继续搜索下去。针对数组中散布一些空字符串的情形,我们可以对二分查找法稍作修改,所需的修改就是mid进行比较的... 阅读全文
posted @ 2014-12-09 16:17 Jessica程序猿 阅读(165) 评论(0) 推荐(0)
摘要:11.4 设想你有一个20GB的文件,每一行一个字符串。请说明将如何对这个文件进行排序。解法:当面试官给出20GB大小的限制时,实际上在暗示些什么。就此题而言,这表明他们不希望你将数据全部载入内存。该怎么办呢?做法是只将部分数据载入内存。我们将整个文件划分为许多块,每个块xMB,其中x是可用的内存大... 阅读全文
posted @ 2014-12-09 15:51 Jessica程序猿 阅读(219) 评论(0) 推荐(0)
摘要:11.3 给定一个排序后的数组,包含n个整数,但这个数组已被旋转很多次,次数不详。请编写代码找出数组中的某个元素。可以假定数组元素原先是按从小到大的顺序排序的。解法:可以直接从开始一个一个比较,也可以采用二分查找的方法。在经典二分查找中,我们会将x与中间元素进行比较,以确定x属于左半部分还是右半部分... 阅读全文
posted @ 2014-12-09 15:46 Jessica程序猿 阅读(276) 评论(0) 推荐(0)
摘要:11.2 编写一个方法,对字符串数组进行排序,将所有变位词1排在相邻的位置。类似leetcode:Anagrams解法:变位词:由变换某个词或短语的字母顺序构成的新的词或短语。例如,“triangle”是“integral”的变位词。此题有个要求,对数组中的字符串进行分组,将变位词排在一起。注意,除... 阅读全文
posted @ 2014-12-09 13:49 Jessica程序猿 阅读(270) 评论(0) 推荐(0)