第八题各小题汇总 【微软面试100题 第八题】
2014-11-05 09:14
218 查看
题目1:
有两个房间,一房间里有三盏灯,另一房间里有控制着这三盏灯的三个开关,这两个房间是分割开的,从一间里不能看到另一件的情况。现在要求受训者分别进这两间房一次,然后判断出这三盏灯分别是由哪个开关控制的。
分析:通过温度来解决。
题目2:
你让一些人为你工作了七天,你要用一根金条作为报酬。金条被分成七小块,每天给出一块。如果你能将金条切割两次,你怎样分给这些工人?
分析:1+2+4.
题目3:
用一种算法来颠倒一个单链表。
可以通过画图来验证方法1和方法2。
方法1:递归
方法2:非递归
题目4:
不用乘法或加法增加8倍。现在用同样的方法增加7倍。
分析:n<<3 (n<<3)-n
题目5:
假设你有一个用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间。此外,除一个数字出现两次以外,其他所有数字只出现一次。假设你只能对这个数组做一次处理,用一种算法找出重复的那个数字。如果你在运算中使用了辅助的存储方式,那么你能找到不用这种方式的算法吗?
分析:
方法1:根据等差数列求和公式:n*(n+1)/2得,sum-1000*(1000+1)/2 = result(其中sum是整个数组的和,result是出现两次的那个数字).
方法2:根据题意,1~1000中只有一个数字出现了两次,其他都出现了一次。则在原数组中再加入1~1000,就成了只有一个数字出现了三次,其他数字都出现了两次,可以用异或来解决.
方法2代码:
有两个房间,一房间里有三盏灯,另一房间里有控制着这三盏灯的三个开关,这两个房间是分割开的,从一间里不能看到另一件的情况。现在要求受训者分别进这两间房一次,然后判断出这三盏灯分别是由哪个开关控制的。
分析:通过温度来解决。
题目2:
你让一些人为你工作了七天,你要用一根金条作为报酬。金条被分成七小块,每天给出一块。如果你能将金条切割两次,你怎样分给这些工人?
分析:1+2+4.
题目3:
用一种算法来颠倒一个单链表。
可以通过画图来验证方法1和方法2。
typedef struct NodeList { struct NodeList *next; int data; }NodeList;
方法1:递归
</pre><pre name="code" class="cpp">NodeList *reverseList(NodeList *head) { if(head==NULL || head->next==NULL) return head; NodeList *tmp = reverse(head->next); head->next->next = head; head->next = NULL; return tmp; }
方法2:非递归
NodeList *reverseList(NodeList *head) { if(head==NULL) return NULL; NodeList *h1,*h2; h1 = head->next; head->next = NULL; while(h1) { h2 = h1; h1 = h1->next; h2->next = head; head = h2; } return h2; }
题目4:
不用乘法或加法增加8倍。现在用同样的方法增加7倍。
分析:n<<3 (n<<3)-n
题目5:
假设你有一个用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间。此外,除一个数字出现两次以外,其他所有数字只出现一次。假设你只能对这个数组做一次处理,用一种算法找出重复的那个数字。如果你在运算中使用了辅助的存储方式,那么你能找到不用这种方式的算法吗?
分析:
方法1:根据等差数列求和公式:n*(n+1)/2得,sum-1000*(1000+1)/2 = result(其中sum是整个数组的和,result是出现两次的那个数字).
方法2:根据题意,1~1000中只有一个数字出现了两次,其他都出现了一次。则在原数组中再加入1~1000,就成了只有一个数字出现了三次,其他数字都出现了两次,可以用异或来解决.
方法2代码:
int findX(int *a) { int k = a[0]; for(int i=1;i<=1000;i++) { k ^= i; k ^= a[i]; } return k; }
相关文章推荐
- 第八题各小题汇总 【微软面试100题 第八题】
- [汇总I]精选微软等公司数据结构+算法面试100题[第1-60题汇总]
- [汇总I]精选微软等公司数据结构+算法面试100题[第1-60题汇总]
- [汇总I]精选微软等公司数据结构+算法面试100题[第1-60题汇总]
- [汇总I]精选微软等公司数据结构+算法面试100题[第1-60题汇总]
- [汇总I]精选微软等公司数据结构+算法面试100题[第1-60题汇总]
- 第三十八题汇总 【微软面试100题 第三十八题】
- 第三十八题汇总 【微软面试100题 第三十八题】
- 微软面试100题---左旋字符串
- 【从零单排之微软面试100题系列】19之Fibonacci数列
- (微软面试100题)求子数组的最大和
- [整理III]微软等数据结构+算法面试100题[最新第61-80题]
- 关于本微软等公司数据结构+算法面试100题系列的郑重声明
- 关于链表问题的面试题目 【微软面试100题 第七十七题】
- 链表和数组的区别在哪里 【微软面试100题 第七十八题】
- 【八十一题题目合集 微软面试100题 第八十一题】
- 微软面试100题2010年版全部答案集锦(含下载地址)
- 微软面试100题打包下载和博客园博客导出工具下载
- 微软面试100题——要想成为盖茨就来试试!(转贴)
- 网友答案整理II:微软等面试100题系列之网友精彩回复 [二]