
笔试面试题
文章平均质量分 65
淡蓝
计算机专业毕业,热爱编程,熟悉网络编程、linux,对linux内核、驱动、游戏、图像也有一定研究。
展开
-
求 1+2+...+n (特殊思维求解)
<br /> <br />题目:<br />求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。 <br /> <br />分析:<br />这道题没有多少实际意义,因为在软件开发中不会有这么变态的限制。但这道题却能有效地考查发散思维能力,而发散思维能力能反映出对编程相关技术理解的深刻程度。 <br />通常求1+2+…+n除了用公式n(n+1)/2之外,无外乎循环和递归两种思路。由于已经明确限制 for和while的使用,原创 2011-04-23 17:17:00 · 1260 阅读 · 0 评论 -
两单向链表相交问题
<br /><br />给出两个单向链表的头指针,比如 h1、h2, <br />判断链表是否相交,如果不相交返回 NULL;如果相交,返回指向第一个相交节点的指针; <br />时间复杂度控制在 O(n)的前提下。 <br /> 这道题首先要弄明白的是,两单向链表相交的话,一定是 Y 型相交,不可能出现 X型,弄清楚这点后接<br />下来的工作就是: <br />(1)先找到 h1,h2 的最后一个节点 p1 和p2,同时记录节点数量 a,b; <br />(2)判断最后一个节点是否相同; <br />原创 2011-04-23 18:36:00 · 800 阅读 · 0 评论 -
字符串的排列
<br /><br />题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串<br />abc,则输出由字符 a、b、c所能排列出来的所有字符串 abc、acb、bac、bca、<br />cab和cba。 <br />分析:这是一道很好的考查对递归理解的编程题,因此在过去一年中频繁出现在<br />各大公司的面试、笔试题中。 <br />我们以三个字符 abc为例来分析一下求字符串排列的过程。首先我们固定第一个<br />字符a,求后面两个字符 bc的排列。当两个字符 bc的排列求好之后原创 2011-04-23 18:35:00 · 813 阅读 · 0 评论 -
二元树的深度
<br /><br />题目:输入一棵二元树的根结点,求该树的深度。从根结点到叶结点依次经过的<br />结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 <br />例如:输入二元树: <br /> 10 <br /> / / <br />原创 2011-04-23 18:34:00 · 1098 阅读 · 0 评论 -
求二元查找树的镜像
<br /><br />题目:<br />输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。<br />例如输入: <br /><br /> 8 <br /> / / <br /> 6 10 <br />// // <br />5 7 9 11 <br />输出: <br /> 8 <br /> / / <br /> 10 6 <br />//原创 2011-04-23 17:27:00 · 649 阅读 · 0 评论 -
查找最小的 k个元素
<br /><br />题目:<br />输入n个整数,输出其中最小的 k个。 例如输入1,2,3,4,5,6,7和 8这8个数字,则最小的 4个数字为 1,2,3<br />和4。 <br />分析:<br />这道题最简单的思路莫过于把输入的 n个整数排序,这样排在最前面的 k个数就是最小的 k个数。只是这种思路的时间复杂度为 O(nlogn)。我们试着寻找更快的解决思路。 <br />我们可以开辟一个长度为 k的数组。每次从输入的 n个整数中读入一个数。如果数组中已经插入的元素少于 k个,则将读入的整原创 2011-04-23 17:09:00 · 642 阅读 · 0 评论 -
求子数组的最大和
<br /><br />题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。<br />要求:<br />时间复杂度为 O(n)。 <br />例:<br />输入的数组为 1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为 3, 10, -4, 7, 2,因此输出为该子数组的和 18。 <br /><br />分析:<br />本题最初为 2005年浙江大学计算机系的考研题的最后一道程序设计题,在200原创 2011-04-23 17:07:00 · 465 阅读 · 0 评论 -
查找链表中倒数第 k个结点
<br /><br />题目:<br />输入一个单向链表,输出该链表中倒数第 k个结点。链表的倒数第 0个结点为链表的尾指针。<br />链表结点定义如下: <br />struct ListNode <br />{ <br /> int m_nKey; <br /> ListNode* m_pNext; <br />}; <br />分析:<br />为了得到倒数第 k个结点,很自然的想法是先走到链表的尾端,再从尾端回溯k步。可是输入的是单向链表,只有从前往后的指针而没有原创 2011-04-23 17:25:00 · 546 阅读 · 0 评论 -
翻转句子中单词的顺序
<br /><br />题目:<br />输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 <br />例如输入“I am a student.”,则输出“student. a am I”。<br /> <br />分析:<br />由于编写字符串相关代码能够反映程序员的编程能力和编程习惯,与字符串相关的问题一直是程序员笔试、面试题的热门题目。本题也曾多次受到包括微软在内的大量公司的青睐。 <br />由于本题需要翻转句子,我们原创 2011-04-23 17:14:00 · 526 阅读 · 0 评论 -
用 C++ 设计一个不能被继承的类
<br /><br />分析:这是Adobe 公司 2007 年校园招聘的最新笔试题。这道题除了考察应聘者的<br />C++ 基本功底外,还能考察反应能力,是一道很好的题目。 <br />在Java 中定义了关键字 final ,被 final 修饰的类不能被继承。但在 C++ 中没<br />有final 这个关键字,要实现这个要求还是需要花费一些精力。 <br />首先想到的是在 C++ 中,子类的构造函数会自动调用父类的构造函数。同样,<br />子类的析构函数也会自动调用父类的析构原创 2011-04-23 18:38:00 · 4683 阅读 · 1 评论 -
第一个只出现一次的字符
<br /><br />题目:在一个字符串中找到第一个只出现一次的字符。如输入 abaccdeff,则输<br />出b。 分析:这道题是 2006年google的一道笔试题。 <br />看到这道题时,最直观的想法是从头开始扫描这个字符串中的每个字符。当访问<br />到某字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字<br />符,则该字符就是只出现一次的字符。如果字符串有 n个字符,每个字符可能与<br />后面的O(n)个字符相比较,因此这种思路时间复杂度是 O(n2)。我们试着原创 2011-04-23 18:32:00 · 605 阅读 · 0 评论 -
找两个链表的第一个公共结点
<br /><br />struct ListNode <br /> <br />{ <br /> <br /> int m_nKey; <br /> <br /> ListNode* m_pNext; <br /> <br />}; <br /> <br />分析:这是一道微软的面试题。微软非常喜欢与链表相关的题目,因此在微软的<br />面试题中,链表出现的概率相当高。 <br /> <br />如果两个单向链表有公共的结点,也就是说两个链表从某一结点开始,它们的原创 2011-04-23 18:39:00 · 2082 阅读 · 0 评论