
Interview
文章平均质量分 86
astro_boy
这个作者很懒,什么都没留下…
展开
-
程序员面试题精选(02)-设计包含min函数的栈
题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。 分析:这是去年google的一道面试题。 我看到这道题目时,第一反应就是每次push一个新元素时,将栈里所有逆序元素排序。这样栈顶元素将是最小元素。但由于不能保证最后push进栈的元素最先出栈,这种思路设计的数据结构已经不是一个栈了。 在栈里添加一个成员变量存放最小元...原创 2010-10-18 22:08:58 · 110 阅读 · 0 评论 -
程序员面试题精选(13)-第一个只出现一次的字符
题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。 分析:这道题是2006年google的一道笔试题。 看到这道题时,最直观的想法是从头开始扫描这个字符串中的每个字符。当访问到某字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符就是只出现一次的字符。如果字符串有n个字符,每个字符可能与后面的O(n)个字符相比较,因此这种思路时间复杂度是...原创 2010-10-18 22:38:20 · 77 阅读 · 0 评论 -
程序员面试题精选(14)-圆圈中最后剩下的数字
题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。 分析:既然题目有一个数字圆圈,很自然的想法是我们用一个数据结构来模拟这个圆圈。在常用的数据结构中,我们很容易想到用环形列表。我们可以创建一个总共有m个数字...原创 2010-10-18 22:40:02 · 95 阅读 · 0 评论 -
程序员面试题精选(15)-含有指针成员的类的拷贝
题目:下面是一个数组类的声明与实现。请分析这个类有什么问题,并针对存在的问题提出几种解决方案。C++代码 template<typename T> class Array { public: Array(unsigned arraySize):data(0), size(arraySize) { ...原创 2010-10-18 22:41:00 · 94 阅读 · 0 评论 -
程序员面试题精选(16)-O(logn)求Fibonacci数列
题目:定义Fibonacci数列如下: / 0 n=0 f(n)= 1 n=1 \ f(n-1)+f(n-2) n=2 输入n,用最快的方法求该数列的第n项。 分析:在很多C语言教科书中讲到递归函数的时候,都会用Fibonacci作为例...原创 2010-10-18 22:41:47 · 115 阅读 · 0 评论 -
程序员面试题精选(17)-把字符串转换成整数
题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。 分析:这道题尽管不是很难,学过C/C++语言一般都能实现基本功能,但不同程序员就这道题写出的代码有很大区别,可以说这道题能够很好地反应出程序员的思维和编程习惯,因此已经被包括微软在内的多家公司用作面试题。建议读者在往下看之前自己先编写代码,再比较自己写的代码和下面的参考代码有哪些不同。 首先我...原创 2010-10-18 22:44:37 · 99 阅读 · 0 评论 -
程序员面试题精选(18)-用两个栈实现队列
题目:某队列的声明如下:C++代码 template<typename T> class CQueue { public: CQueue() {} ~CQueue() {} void appendTail(const T& node); // append a...原创 2010-10-18 22:45:02 · 118 阅读 · 0 评论 -
淘宝面试的几个算法题
一、给你1副扑克牌,你怎么发牌给4个人? 我:首先扑克牌可以排序,其次,可以每次产生1个随机数,然后把该随机数对应的牌发出去,每次发的牌轮流给第1个人、第2个人。。。 奥,不对,这样可能导致已经发出去的牌再次被发出去! (进入沉思~) 他: Smilence...我:(随即就给出可行的低效解) 可以这样嘛,首先声明,不考虑效率的前提下,可以这样做:把每张牌维护成一个结点,串联成一个...原创 2010-10-21 11:27:48 · 185 阅读 · 0 评论 -
栈内存和堆内存
堆:顺序随意栈:先进后出堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静...原创 2010-10-21 11:55:32 · 91 阅读 · 0 评论 -
面试的准备与发挥
面试是一场智力的较量。在这场较量中,只有真正具有实力而又深黯面试策略的人才能获胜。面试没有一个固定的模式,也没有完美的标准答案,但却有一个检验答案的共同标准——你是否进行了理智的谈话。面试是你成功就业的重要环节,也是具有决定意义的环节,有很多人具备用人单位所要求的一切条件,可是往往在面试时发挥失常,导致前功尽弃。那么接到面试通知时我们该如何准备与发挥呢:一:善于运用各种语言第一印象是永...原创 2012-04-26 10:00:04 · 191 阅读 · 0 评论 -
程序员面试题精选(12)-从上往下遍历二元树
题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 例如输入 8 / \ 6 10 /\ /\ 5 7 9 11 输出8 6 10 5 7 9 11。 分析:这曾是微软的一道面试题。这道题实质上是要求遍历一棵二元树,只不过不是我们熟悉的前序、中序或者后序遍...原创 2010-10-18 22:37:47 · 93 阅读 · 0 评论 -
程序员面试题精选(11)-求二元查找树的镜像
题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。 例如输入: 8 / \ 6 10 /\ /\ 5 7 9 11 输出: 8 / \ 10 6 /\ /\ 11 9 ...原创 2010-10-18 22:36:57 · 84 阅读 · 0 评论 -
程序员面试题精选(01) 把二元查找树转变成排序的双向链表
题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 比如将二元查找树 10 / \ ...原创 2010-10-18 22:10:25 · 121 阅读 · 0 评论 -
程序员面试题精选(03)-求子数组的最大和
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。 分析:本题最初为2005年浙江大学计算机系的考研题的最后一道程序设计题,在2006年里包...原创 2010-10-18 22:20:17 · 100 阅读 · 0 评论 -
程序员面试题精选(04)-在二元树中找出和为某一值的所有路径
题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树 10 / \ ...原创 2010-10-18 22:22:15 · 124 阅读 · 0 评论 -
程序员面试题精选(05)-查找最小的k个元素
题目:输入n个整数,输出其中最小的k个。 例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。 分析:这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前面的k个数就是最小的k个数。只是这种思路的时间复杂度为O(nlogn)。我们试着寻找更快的解决思路。 我们可以开辟一个长度为k的数组。每次从输入的n个整数中读入一个数。如果数组中已经插入的元素少于k个,则将读...原创 2010-10-18 22:24:09 · 98 阅读 · 0 评论 -
程序员面试题精选(06)-判断整数序列是不是二元查找树的后序遍历结果
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。 例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \ / \ 5 7 9 11 因此返回true。 如果输入7、4、6、5,没...原创 2010-10-18 22:27:21 · 133 阅读 · 0 评论 -
程序员面试题精选(07)-翻转句子中单词的顺序
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 例如输入“I am a student.”,则输出“student. a am I”。 分析:由于编写字符串相关代码能够反映程序员的编程能力和编程习惯,与字符串相关的问题一直是程序员笔试、面试题的热门题目。本题也曾多次受到包括微软在内的大量公司的青睐。 由于本题需...原创 2010-10-18 22:30:41 · 109 阅读 · 0 评论 -
程序员面试题精选(08)-求1+2+...+n
题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。 分析:这道题没有多少实际意义,因为在软件开发中不会有这么变态的限制。但这道题却能有效地考查发散思维能力,而发散思维能力能反映出对编程相关技术理解的深刻程度。 通常求1+2+…+n除了用公式n(n+1)/2之外,无外乎循环和递归两种思路。由于已经明确限制fo...原创 2010-10-18 22:31:54 · 146 阅读 · 0 评论 -
程序员面试题精选(09)-查找链表中倒数第k个结点
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; 分析:为了得到倒数第k个结点,很自然的想法是先走到链表的尾端,再从尾端回溯k步。可是输入的是单向链表,只有从前往后的指针而没有从后往前的指针。因此我...原创 2010-10-18 22:32:28 · 107 阅读 · 0 评论 -
程序员面试题精选(10)-在排序数组中查找和为给定值的两个数字
题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。 例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。 分析:如果我们不考虑时间复杂度,最简单想法的莫过去先在数组中固定一个数字,再依次判断数组中剩下的n-1个数字与它的和是不是等于输...原创 2010-10-18 22:33:10 · 115 阅读 · 0 评论 -
zz IBM 面试问题
1.JAVA内存回收机制2.抽象类与接口的区别3.除了简历上所说的还有什么其他的技能4.举一个实际的命令(简历上写了会linux的基本使用)5.会不会linux下的shell编程6.可实习的时间 3月12日 IBM CSDL面试刚过去直接就笔试,题不少,有JAVA的,操作系统的,还有说出英文缩写的,最后是英语的,说是半小时之内能做多少算多少,最后我就选择性的做了...原创 2012-05-30 14:31:59 · 113 阅读 · 0 评论