面试题目小结
来源:互联网 发布:非80端口跳转 编辑:程序博客网 时间:2024/05/19 02:43
最近遇到的一些IT公司面试题,总结一下:
1. 12个大小形状相同的球,其中一个质量与其他的不同,一个天平称重三次,找出那个质量不同的球。
注意分析的顺序。
2. 在一个字符串中查找另一个给定的字符串。
普通查找法,以及KMP算法。
3. 快速查找单链表的中间节点。
4. 找出数组中出现次数超过一半的数。
#include <stdio.h>int find(int a[],int len){ if(NULL==a||len<=0) { return -1; } int temp=a[0]; int count =0; int i; for(i=0;i<len;i++){ if(count==0){ temp = a[i]; } if(a[i]==temp){ count++; } else{ count--; } } return temp;}int main(int args,char ** argv){ int a[] = {3,2,2,2,2,3}; int res = find(a,sizeof(a)/sizeof(int)); printf("%d\n",res); return 0;}
5. 找出数组中只出现一次的那个数,其他的数均出现两次。
考虑位运算。
6. 一个无序数组中,数字两两不同,找出第K大的数。
7.判断一个单链表是否有环以及环的连接点。
给定一个单链表,只给出头指针head:
1)如何判断是否存在环?
2)如何知道环的长度?
3)如何找出环的连接点在哪里?
4)带环链表的长度是多少?
解法:
1、对于问题1,使用追赶的方法,设定两个指针slow、fast,从头指针开始,每次分别前进1步、2步。如存在环,则两者相遇;如不存在环,fast遇到NULL退出。
bool isExitsLoop(Node* head) Node *slow = head, *fast = head; //fast && fast->next保证了fast可以接着向下移动 while(fast && fast->next) slow = slow->next fast = fast->next->next; if(slow == fast) break; return !(fast==NULL || fast->next == NULL);
2、对于问题2,记录下问题1的碰撞点p,slow、fast从该点开始,再次碰撞所走过的操作数就是环的长度s。
3、问题3:有定理如下:碰撞点p到连接点的距离=头指针到连接点的距离,因此,分别从碰撞点、头指针开始走,相遇的那个点就是连接点。(证明略)
4、问题3中已经求出连接点距离头指针的长度,加上问题2中求出的环的长度,二者之和就是带环单链表的长度。
未完待续。。。。
0 0
- 笔试面试题目小结
- 面试题目小结
- MySQL DBA 面试题目小结
- 盛大游戏面试题目小结
- .NET面试题目小结,寻自网上
- 个人面试所考题目内容小结
- 面试中的二叉树题目小结
- static用法小结——面试常问题目
- 面试题目
- 面试题目
- 面试题目
- 面试题目
- 面试题目
- 面试题目
- 面试题目
- 面试题目
- 面试题目
- 面试题目
- applicationContext对象获取方法
- Java加密技术(三)——PBE算法
- MongoDB---Sharding分片
- 再谈URL载入系统【未完】
- POJ 2125 Destroying The Graph 最小点权覆盖集
- 面试题目小结
- oracle锁表
- MATLAB的textread
- awstats安装使用
- 数据库连接池技术
- Java加密技术(四)——非对称加密算法RSA
- 基于PHP——简单的WSDL的创建(WSDL篇)
- Ubuntu安装完oracle后重启计算机遇到的一些问题解决
- Linux内核分析 - 网络[四]:路由表