据传微软面试题(一)

Q:有A、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥?
A: 第一步:AB过桥,A 返回,耗时 2+1 = 3
    第二步:CD过桥,B返回,耗时10+2 = 12
    第三步:AB过桥,耗时 2。累计 3+12+2=17

Q:如果你有一个容量为5夸脱的水桶和一个容量为3夸脱的水桶,怎样准确地量出4夸脱的水?
A:盛满5夸脱的水桶,倒满3夸脱水桶,倒掉3夸脱的水桶的水,把5夸脱水桶剩下的水倒入3夸脱的水桶,再次盛满5夸脱的水桶,然后把3夸脱的水桶倒满,这时5夸脱的水桶内剩下的水就是4夸脱。

Q:不用乘法或者加法增加8倍,现在用同样的方法增加7倍
A:使用位移,一个数向左位移3,增加8倍,再减自身,增加7倍。

Q:1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现
一次。每个数组元素只能访问一次,设计一个算法,将它找出来;不用辅助存储空
间,能否设计一个算法实现?
A:利用数字的下标方式实现

时间: 2024-09-18 14:35:48

据传微软面试题(一)的相关文章

微软面试题:正则表达式提取链接地址

写出正则表达式,从一个字符串中提取链接地址.比如下面字符串中  "IT面试题博客中包含很多  <a href=http://hi.baidu.com/mianshiti/blog/category/微软面试题> 微软面试题 </a> "  则需要提取的地址为 " http://hi.baidu.com/mianshiti/blog/category/微软面试题 " 在python中:  import re  p = re.compile('&

微软面试题解析:整数的二进制表示中1的个数

题目:输入一个整数,求该整数的二进制表达中有多少个1. 例如输入10,由于其二进制表示为1010,有两个1,因此输出2. 分析: 使用移位操作,来实现. 具体实现如下: #include<iostream> using namespace std; int binary1num(int d) { int cnt = 0; while(d/2 != 0) { if(d%2 == 1) cnt ++; d = d/2; } if(d%2 == 1) cnt ++; return cnt; } in

经典算法(9) 从归并排序到数列的逆序数对(微软笔试题)

首先来看看原题 微软2010年笔试题 在一个排列中,如果一对数的前后位置与大小顺序相反 ,即前面的数大于后面的数,那么它们就称为一个逆序数对.一个排列中逆序的总数就称为这个排列的逆序 数.如{2,4,3,1}中,2和1,4和3,4和1,3和1是逆序数对,因此整个数组的逆序数对个数为4,现在给定 一数组,要求统计出该数组的逆序数对个数. 计算数列的逆序数对个数最简单的方便就最从前向后依 次统计每个数字与它后面的数字是否能组成逆序数对.代码如下: #include <stdio.h> int ma

关于论坛上那个SQL微软面试题。我的解答方法 :-)

解答|微软 问题: 一百个账户各有100$,某个账户某天如有支出则添加一条新记录,记录其余额.一百天后,请输出每天所有账户的余额信息  这个问题的难点在于每个用户在某天可能有多条纪录,也可能一条纪录也没有(不包括第一天) 返回的记录集是一个100天*100个用户的纪录集 下面是我的思路: 1.创建表并插入测试数据:我们要求username从1-100CREATE TABLE [dbo].[TABLE2] ([username] [varchar] (50) NOT NULL , --用户名[ou

微软面试题解析:栈的push、pop序列(栈)

题目:输入两个整数序列.其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序. 为了简单起见,我们假设push序列的任意两个整数都是不相等的. 比如: 输入的push序列是1,2,3,4,5 ,那么4,5,3,2,1就有可能是一个pop序列. 因为可以有如下的push和pop序列: push 1, push 2, push 3, push 4, pop, push 5, pop, pop, pop, pop 这样的的得到的pop序列就是4,5,3,2,1. 但是序列4,

微软面试题解析:实现一个挺高级的字符匹配算法

题目: 给一串很长字符串,要求找到符合要求的字符串,例如目的串:123 1******3***2 ,12*****3这些都要找出来 其实就是类似一些和谐系统. 分析: 自然匹配就是对待匹配的每个字符挨个匹配 设你的待匹配字串长度位n,模式字符串长度位m. 对于待匹配字符串中的任意一个字符最坏情况下要匹配m次,也就是说这个字符不在模式字符串中. 所以最坏情况下总共是m*n此匹配,时间复杂度就是O(m*n) 更多精彩内容:http://www.bianceng.cnhttp://www.biance

微软面试题解析:使用多线程实现一个队列

题目:实现一个队列 队列的应用场景为: 一个生产者线程将int类型的数入列,一个消费者线程将int类型的数出列. 分析: 首先得设计一个队列,并且最好是循环队列,否则队列里面的空间很容易一下就使用完了. 题目要求使用生产者线程和消费者线程,所以得设计成线程保护,否则取数据和推送数据很容易搞错.可以使用线程的互斥变量:pthread_mutex_t 加pthread_mutex_lock 锁,解锁:pthread_mutex_unlock 比如:生产者线程每隔1s推送:1,2,3,4,5,6,7,

微软面试题:利用天平砝码,三次将140克的盐 分成50、90克两份?

有一个天平,2克和7克砝码各一个.如何利用天平砝码在三次内将140克盐分成50,90克两份. 第一种方法:  第一次:先称 7+2克盐 (相当于有三个法码2,7,9)  第二次:称2+7+9=18克盐 (相当于有2,7,9,18四个法码)  第三次:称7+18=x+2,得出x是23,23+9+18=50克盐.  剩下就是90克了.  第二种方法:  1.先把140克盐分为两份,每份70克  2.在把70克分为两份,每份35克  3.然后把两个砝码放在天平两边,把35克面粉分成两份也放在两边(15

微软面试题解析:求一个矩阵中最大的二维矩阵(元素和最大)

题目:求一个矩阵中最大的二维矩阵(元素和最大).如: 1 2 0 3 4 2 3 4 5 1 1 1 5 3 0 中最大的是: 4 5 5 3 要求:(1)写出算法;(2)分析时间复杂度;(3)用C写出关键代码 分析: 直接遍历二维数组,求出最大的二维数组就OK了 实现如下: #include<iostream> using namespace std; int max_matrix(int (*array)[5], int maxx, int maxy, int& posi, int