笔试/面试
jdq_summer
算法数据结构大数据
展开
-
常见面试题
1. 在类的普通成员函数中调用虚函数,情况是怎么样的?(对象、引用、指针)多态, 事实上,这是 Template Method模式的关键2. 关于成员变量初始化顺序,几个有依赖关系的成员变量要初始化,让写出构造函数。在初始化列表中,成员变量的初始化顺序是其在类中声明顺序,而非列表中的顺序。3. 写一个双链表。Struct ListNode{转载 2013-10-04 15:46:54 · 710 阅读 · 0 评论 -
输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。
输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字M,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。思路:(1)让指针指向数组的头部和尾部,相加,如果小于M,则增大头指针,如果大于则减小尾指针(2转载 2013-10-07 15:41:29 · 746 阅读 · 0 评论 -
在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。
题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。 分析:这道题是2006年google的一道笔试题。采用容器map很好的解决了这个问题,first存放字符,second存放数量#include #include #include using namespace std;void GetcharCount( const string& st原创 2013-10-07 16:58:02 · 905 阅读 · 1 评论 -
n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字
题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。方法一:采用list容器链表存放元素,但是要维护头尾节点的循环。#include #include u原创 2013-10-07 17:19:41 · 1425 阅读 · 0 评论 -
输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.
这道题的思路参考0-1背包:定义函数F(n,m)来求解这个问题,那么F(n,m)可以分解为两个子问题F(n-1,m)和F(n-1,m-n).由于题目要求列出所有的组合,使用类似动态规划的方法比较复杂,我在这里直接使用递归来解决这个问题。虽然效率可能不是很好,但是代码的可读性还是比较好的。#include "stdafx.h"#include using namespace std;转载 2013-10-07 19:32:41 · 696 阅读 · 0 评论 -
整数的二进制表示中1的个数
整数的二进制表示中1的个数题目:输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。分析:这是一道很基本的考查位运算的面试题。1、每次向右移动一位。2、测试最低位是否为1 :n&1;如果为1,则最低位为1,count++;int test(int n){ int count=0;原创 2013-10-07 20:29:04 · 626 阅读 · 0 评论 -
写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)功能:在字符串中找出连续最长的数字串,并把这个串的长度返回
写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)功能:在字符串中找出连续最长的数字串,并把这个串的长度返回/************************************************************************//* 写一个函数,它的原形是int continumax(char转载 2013-10-07 20:02:26 · 738 阅读 · 0 评论 -
4.给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
4.给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数问题分析:现在给了一个能随机生成1~5的随机函数,怎样利用这个已知条件生成一个1~7的随机函数呢?既然要生成的是随机数那么生成1,2,3,4,5,6,7的概率就应该是一样的。显然现在光生成1~5之间的数就不够了,我们想到应该要加大生成数的范围,并且加大范围的同时还要保证每个数产生的概率一样,于是有这样一种方法用这个表达式转载 2013-10-15 11:54:31 · 868 阅读 · 0 评论 -
C++常见笔试面试题
1. 找错试题1:Void test1(){ char string[10]; char* str1="0123456789"; strcpy(string, str1);} 试题2:Void test2(){ char string[10], str1[10]; for(I=0; I10转载 2013-11-09 09:21:14 · 970 阅读 · 0 评论 -
输入一个单向链表,输出该链表中倒数第k个结点
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};分析:为了得到倒数第k个结点,很自然的想法是先走到链表的尾端,再从尾端回溯k步。可是输入的是单向链表,只有从前往后的指针而没有从后往转载 2013-10-07 15:33:47 · 1166 阅读 · 1 评论 -
求1+2+3+...+n,要求不能使用乘除法,for,while,if,else,switch,case等关键字以及条件判断语句
求1+2+3+...+n,要求不能使用乘除法,for,while,if,else,switch,case等关键字以及条件判断语句方法一:利用构造函数和静态数据成员#include using namespace std;class Temp{public: Temp() { ++N; Sum+=N; } static void Reset() {转载 2013-10-07 15:25:20 · 1756 阅读 · 0 评论 -
定义Fibonacci数列,输入n,用最快的方法求该数列的第n项
题目:定义Fibonacci数列如下: / 0 n=0f(n)= 1 n=1 / f(n-1)+f(n-2) n=2输入n,用最快的方法求该数列的第n项。分析:在很多C语言教科书中讲到递归函数的时候,都会用Fibonacci作为例子。当递归层次较大时,不适合采用递归,可以堆栈溢出,并且浪费控件,应该采用迭代。1、题目只是求第n项的值,只要求出第n-1和n-2即原创 2013-10-07 19:47:22 · 1371 阅读 · 0 评论 -
0-1装载问题求得最优解
一,问题描述 有一批共n个集装箱要装上2艘载重量分别为c1和c2的轮船上,其中集装箱i的重量为wi,且w1+w2+...+wn 装载问题要求确定,是否有一个合理的装载方案可将这n个集装箱装上2艘轮船。如果有,找出一种装载方案。 例如,当n=3,c1=c2=50,且w=[10,40,40]时,可将集装箱1和集装箱2装上一艘轮船,而将集装转载 2013-10-04 16:55:27 · 2112 阅读 · 0 评论 -
把二元查找树转变成排序的双向链表
1、把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。10/ \6 14/ \ / \4 8 12 16转换成双向链表4=6=8=10=12=14=16。首先我们定义的二元查找树节点的数据结构如下:struct BSTreeNode{int m_n原创 2013-10-07 09:00:36 · 530 阅读 · 0 评论 -
求子数组的最大和
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。1、当累加和出现负数时,应该重置为零,重新求和2、不断更新最大值原创 2013-10-07 09:39:15 · 737 阅读 · 0 评论 -
在二元树中找出和为某一值的所有路径
4.在二元树中找出和为某一值的所有路径题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如 输入整数22和如下二元树 10 / \ 5 12 / \ 4 7则打印出两条路径:10, 12和10, 5, 7。二元树节点的数据结构原创 2013-10-07 10:56:34 · 519 阅读 · 0 评论 -
查找最小的k个元素
查找最小的k个元素题目:输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。1、输入元素,并排序2、输出前k个元素排序:采用高效的排序方法,如:快速排序,归并排序等方法一:采用最简单的方法#include#include#includeusing namespace std;i原创 2013-10-07 12:37:14 · 525 阅读 · 0 评论 -
算法面试题
1.把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 10 / \ 6 14 / \ / \4 8 12 16 转换成双向链表4=6=8=10=12=14=16。 首先我们定义的二元查找树 节点的数据结构如下: struct BSTree转载 2013-10-07 19:40:49 · 1563 阅读 · 0 评论 -
有两个有序的单链表,将它们合并为一个有序的单链表,不允许分配额外空间
题目:有两个有序的单链表,将它们合并为一个有序的单链表,不允许分配额外空间。分析: 这一道题应该很简单,不分配额外空间是很容易满足的。数据结构课本上就有这样的实现,具体不多说,看参考代码: 1: struct Node 2: { 3: int value; 4: struct Node* next; 5: }; 6: 7转载 2013-10-07 19:54:27 · 1452 阅读 · 0 评论 -
判断整数序列是不是二元查找树的后序遍历结果
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \ / \ 5 7 9 11因此返回true。如果输入7、4、原创 2013-10-07 15:10:37 · 504 阅读 · 0 评论 -
求N!末尾有多少个0
求N!末尾有多少个0/*思考: 该题实际上是求(2 5)因子对的个数。对于任意一个阶乘,5因子的个数总是小于2因子的个数,仅需考虑n!中5因子的个数方法: (1) 将该数用 5 除, 得到的商取整数。 (2) 然后再用所得商当被除数除以 5,得到的商取整数。 (3) 持续做到商等于 0 为止。 (4) 过程中的商加总即为阶乘的尾数转载 2013-10-15 11:36:57 · 1467 阅读 · 0 评论