代码改变世界

随笔分类 -  面试题

Leetcode: Word Break

2014-06-23 16:09 by youxin, 221 阅读, 收藏, 编辑
摘要: http://blog.csdn.net/doc_sgl/article/details/12323015 阅读全文

转: 连续数打乱判断出少了哪些数?

2014-03-07 17:46 by youxin, 806 阅读, 收藏, 编辑
摘要: . 问题:100个连续的数打乱之后,随机取出1个数,问如何最快速的判断出少了哪一个?分析:对于所有100个连续的数,只要除余100。一定在0~99之间。一般来说,比较常规的做法就是先排序(利用Hash表定位),在循环查找。当然时间复杂度是O(2n)。现在介绍一种很牛的O(n)做法:求二进制异或运算。异或运算: 0^0=1^1=0; 0^1=1^0=1。0~99个数全部异或的结果只能是0。如果缺少一个数,那么全部异或的结果正好就是那个数。为什么呢?我们做个小实验:假如有四个数: 0001 0010,0101, 0110 排列成一个matrix. bits: 1 2 3 4 0 0 0 1 0 0 阅读全文

10道精彩的智力问题(转)

2013-11-03 19:40 by youxin, 1062 阅读, 收藏, 编辑
摘要: 1、给一个瞎子52张扑克牌,并告诉他里面恰好有10张牌是正面朝上的。要求这个瞎子把牌分成两堆,使得每堆牌里正面朝上的牌的张数一样多。瞎子应该怎么做?答案:把扑克牌分成两堆,一堆10张,一堆42张。然后,把小的那一堆里的所有牌全部翻过来。大D:很神奇。( 下面为详细的解释:将扑克牌分成两份, 一份10张,一份42张。 假设10张中,全部正面朝上,42张中就没有向上的,那么将10张向上的一翻,就变成两边都没有一张向上。 若10张中9张向上1张向下,42张中则只有1张向上。将10张全部翻转,就变为9张向下,1张向上。两堆向上牌数就相等了、 以此类推,如果10张全部向下,42张中就有10张向上。那么将 阅读全文

转:面试中常见的一些算法问题

2013-10-05 22:31 by youxin, 778 阅读, 收藏, 编辑
摘要: Problem 1: Is it a loop ? (判断链表是否有环?)Assume that wehave a head pointer to a link-list. Also assumethat we know the list is single-linked. Can you come up an algorithm to checkwhether this link list includes a loop by using O(n) time and O(1) space wheren is the length of the list? Furthermore, can y 阅读全文

程序员面试题精选100题(32)-不能被继承的类

2013-10-03 02:04 by youxin, 456 阅读, 收藏, 编辑
摘要: 题目:用C++设计一个不能被继承的类。分析:这是Adobe公司2007年校园招聘的最新笔试题。这道题除了考察应聘者的C++基本功底外,还能考察反应能力,是一道很好的题目。在Java中定义了关键字final,被final修饰的类不能被继承。但在C++中没有final这个关键字,要实现这个要求还是需要花... 阅读全文

面试题之数组统计

2013-10-03 01:26 by youxin, 703 阅读, 收藏, 编辑
摘要: 题目:给定数组A,大小为n,数组元素为0到n-1的数字,不过有的数字出现了多次,有的数字没有出现。请给出算法和程序,统计哪些数字没有出现,哪些数字出现了多少次。要求在O(n)的时间复杂度,O(1)的空间复杂度下完成。问题的难点在于时间和空间复杂度。O(1)的空间含义,可以使用变量,但不能开辟数组或者map等来计数。解法一:直接用两层遍历,O(n^2)的时间复杂度,O(1)的空间复杂度。效率太低.#include #include int main(){ int n, i, j, count = 0; //n is The length of the Array while ... 阅读全文

面试题:找出数组中只出现一次的2个数(异或的巧妙应用)(出现3次)

2013-10-02 23:49 by youxin, 20108 阅读, 收藏, 编辑
摘要: 题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。分析:这是一道很新颖的关于位运算的面试题。首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一... 阅读全文

部分有序中查找给定值-【百度面试题】循环有序数组的查找问题

2013-10-02 17:09 by youxin, 1793 阅读, 收藏, 编辑
摘要: 问题:有一个循环有序数组A,如{7,8,9,0,1,2,3,4,5,6},不知道其最小值的位置。那么如何从这样的数组中寻找一个特定的元素呢?(循环有序满足以下条件之一:1.数组所有元素相等2.数组是个有序数列,这时候分界点就是第一个元素的位置3.总能找到一个位置(也是只有唯一一个位置)从那个位置开始,左边是个递增序列,右边也是一个有序序列,且最后一个元素小于或者等于第一个元素。(也就是首尾相连为 有序的)。)问题分析:我们可以把循环有序数组分为左右两部分(以mid = (low+high)/ 2为界),由循环有序数组的特点知,左右两部分必有一部分是有序的,我们可以找出有序的这部分,然后看所查找 阅读全文

如果有三个Bool型变量,请写出一程序得知其中有2个以上变量的值是true

2013-10-01 14:56 by youxin, 1098 阅读, 收藏, 编辑
摘要: 下面这篇文章是从StackOverflow来的。LZ面试的时候遇到了一道面试题:“如果有三个Bool型变量,请写出一程序得知其中有2个以上变量的值是true”,于是LZ做了下面的这样的程序:boolean atLeastTwo(boolean a, boolean b, boolean c) { ... 阅读全文

百度面试题:求绝对值最小的数

2013-09-10 19:52 by youxin, 866 阅读, 收藏, 编辑
摘要: 有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4。我们首先要看到,是已经排序的。算法实现的基本思路三种情况:全负数 全正数 正负皆有1:取最右 时间复杂度为o(1)2:取最左 时间复杂度为o(1)3:二分查找0, 找到为最小,否则最后查找区间,左右取绝对值最小,时间复杂度为o(log2 n)这个二分查找还是有点难写的,如果arr[mid]为正,还要分arr[mid-1]是否为负,若为负,则一定是arr[m 阅读全文

程序员面试题精选100题(40)-扑克牌的顺子

2013-09-07 01:43 by youxin, 898 阅读, 收藏, 编辑
摘要: 题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。分析:这题目很有意思,是一个典型的寓教于乐的题目。我们需要把扑克牌的背景抽象成计算机语言。不难想象,我们可以把5张牌看成由5个数字组成的数组。大小王是特殊的数字,我们不妨把它们都当成0,这样和其他扑克牌代表的数字就不重复了。接下来我们来分析怎样判断5个数字是不是连续的。最直观的是,我们把数组排序。但值得注意的是,由于0可以当成任意数字,我们可以用0去补满数组中的空缺。也就是排序之后的数组不是连续的,即相邻的两个数字相隔若干个数字,但如果. 阅读全文

C++面试经常涉及的概念1

2013-09-06 16:19 by youxin, 546 阅读, 收藏, 编辑
摘要: 1.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应。free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。网易面试题:new/delete和malloc/free的区别new/delete:给定数据类型,new/delete会自动计算内存大小,并进行分配或释放。如果是对类进行操作,new/ 阅读全文

转 C语言面试题大汇总

2013-09-06 14:44 by youxin, 650 阅读, 收藏, 编辑
摘要: 转 C语言面试题大汇总,个人觉得还是比较全地!!!\主 题: C语言面试题大汇总,个人觉得还是比较全地!!!作 者: free131 (白日?做梦!)信 誉 值: 100最近因为找工作,收集了很多C语言方面方面的面试题以及答案。现在新工作搞定了,决定把这些资料发出来,送给有需要的朋友,免得再象我一样到处搜寻,实在辛苦。发布之前先申明两点: 1 所有资料来自网络(主要是CSDN),本人只是收集和转发。 2 所有问题解答(尤其是代码)只是参考,不保证正确。先发基本问题,再发编程问题.......... 回复人: free131(白日?做梦!) ( ) 信誉:100 2006-4-17 10:0.. 阅读全文

苹果向求职者抛出的8大难题

2013-09-04 22:32 by youxin, 358 阅读, 收藏, 编辑
摘要: 6月14日消息,苹果公司在招聘员工时,会向求职者问一些“可汗学院”(Khan Academy)提出的考验智商的谜题。你可能没听说过“可汗学院”,但“可汗学院”的谜题被苹果采用一定是有其道理的。可汗学院由孟加拉裔美国人萨尔曼•可汗(Salman Kahan)创立,是一家由谷歌和比尔&梅琳达•盖茨基金会背后支持的教育性非营利组织,主旨在于利用网络影片进行免费授课,目前已经有关于数学、历史、金融、物理、化学、生物、天文学等科目的内容。苹果在面试过程中随时都有可能向求职者抛出这些考验智商与逻辑的问题,因此如果你向往进入苹果工作,这些艰涩的问题在面试前必须谨慎对待仔细研究,因为苹果的原则是——不 阅读全文

面试智力题研究

2013-09-03 23:27 by youxin, 1142 阅读, 收藏, 编辑
摘要: 智力题研究一:不管是找工作还是考公务员,常见的一种面试或者笔试题目就是智力题,这种题目有的比较简单,有的难度很大,有的是一种技巧,有的需要数学知识推导,不管怎样,绝对对于一个人锻炼自己的思维能力非常有益。本文整理了当前比较常见的智力题目,供大家一块研究与学习。【绳子类】1、 一条绳子(粗细不均,长短不一),从一头点燃,全部烧完要耗时1个小时,问如何用这条绳子测出半个小时?(初级)2、 有一些绳子(粗细不均,长短不一),但是每根绳子点燃后都烧一个小时,问用什么方法可以用这些绳子计算45分钟的时间,计算1小时15分钟时间呢?(中级)(分析)这类题目比较简单。由于绳子是双向的,只需同时点燃绳子的两端 阅读全文

面试题:位操作实现四则运算

2013-09-01 23:05 by youxin, 7216 阅读, 收藏, 编辑
摘要: 首先看一个面试题:题目:写一个函数,求两个整数的之和,要求在函数体内不得使用+、-、×、÷。分析:这又是一道考察发散思维的很有意思的题目。当我们习以为常的东西被限制使用的时候,如何突破常规去思考,就是解决这个问题的关键所在。看到的这个题目,我的第一反应是傻眼了,四则运算都不能用,那还能用什么啊?可是... 阅读全文

面试题:递归颠倒栈 与栈排序

2013-09-01 22:01 by youxin, 2198 阅读, 收藏, 编辑
摘要: 题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶。分析:乍一看到这道题目,第一反应是把栈里的所有元素逐一pop出来,放到一个数组里,然后在数组里颠倒所有元素,最后把数组中的所有元素逐一push进入栈。这时栈也就颠倒过... 阅读全文

面试题:最长回文子串(即求对称字符串的最大长度 )

2013-09-01 03:44 by youxin, 472 阅读, 收藏, 编辑
摘要: 题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”, 因此输出4。分析:可能很多人都写过判断一个字符串是不是对称的函数,这个题目可以看成是该函数的加强版。 阅读全文

百度面试题:把数组排成最小的数

2013-09-01 03:30 by youxin, 1827 阅读, 收藏, 编辑
摘要: 问题描述:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。很显然,数前面的越小越好。 思路:先将整数数组转为字符串数组,然后字符串数组进行排序,最后依次输出字符串数组即可。这里注意的是字符串的比较函数需要重新定义,不是比较a和b,而是比较ab与 ba。如果ab ba,则a > b;如果ab = ba,则a = b。比较函数的定义是本解决方案的关键。这道题其实就是希望我们能找到一个排序规则,根据这个规则排出来的数组能排成一个最小的数字。证明:为什么这样 阅读全文

面试题:在O(1)时间删除链表结点

2013-09-01 03:20 by youxin, 407 阅读, 收藏, 编辑
摘要: 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。链表结点与函数的定义如下:struct ListNode{ int m_nValue; ListNode* m_pNext;};void DeleteNode(ListNode** pListHead,ListNode* pToBeDeleted);删除结点的操作我们经常碰到,比如一个链表A->B->C->D->E->F->G。如果我们要删除结点E,那么我们只需要让结点D的指针指向结点F即可,但是我们现在只给出链表头结点的指针以及结点E的指针,而又是单项链表,不能在O(1)时间内 阅读全文