经典面试题收集
来源:互联网 发布:linux glibc prnitf 编辑:程序博客网 时间:2024/06/06 00:31
1、最大间隙问题
给定n个实数,求着n个实数在实轴上向量2个数之间的最大差值,要求线性的时间算法。
方案1:最先想到的方法就是先对这n个数据进行排序,然后一遍扫描即可确定相邻的最大间隙。但该方法不能满足线性时间的要求。故采取如下方法:
- 找到n个数据中最大和最小数据max和min。
- 用n-2个点等分区间[min, max],即将[min, max]等分为n-1个区间(前闭后开区间),将这些区间看作桶,编号为,且桶i 的上界和桶i+1的下届相同,即每个桶的大小相同。每个桶的大小为:。实际上,这些桶的边界构成了一个等差数列(首项为min,公差为),且认为将min放入第一个桶,将max放入第n-1个桶。
- 将n个数放入n-1个桶中:将每个元素x[i] 分配到某个桶(编号为index),其中,并求出分到每个桶的最大最小数据。
- 最大间隙:除最大最小数据max和min以外的n-2个数据放入n-1个桶中,由抽屉原理可知至少有一个桶是空的,又因为每个桶的大小相同,所以最大间隙不会在同一桶中出现,然后扫面相邻桶的最大间距(如果有空桶,就计算空桶前后的两个桶的最大间距),顺序扫描一遍就可得到。
2、判断一个链表是否有环
struct Node { int data; int Node *next;};Node* testCylic(Node * h1) { Node * p1 = h1, *p2 = h1; while (p2!=NULL && 2->next!=NULL) { p1 = p1->next; p2= p2->next->next; if (p1 == p2) { return p1;} return null;}
testCylic函数测试一个链表是否有环,如果有环返回除英语环中的某个节点的指针。没有环返回空。3、测试两个链表是否相交
(1)首先判断两个链表是否有环。
如果没有环,直接判断两个链表的最后一个节点是否相等,相等则说明两个链表相交。不等就不想交
如果其中一个有环,另一个没有环,那么一定不想交。
如果两个都有环,那么首先用上面的测试环存在的函数,分别返回两个链表中处于环中的一个节点,然后在使用与判断链表是否有环的想法来判断是否相交。
bool isJoint(Node* p1,Node* p2){ Node* tmp1 = testCylic(p1); Node* tmp2 = testCylic(p2); if (null == tmp1 && null == tmp2)) { return testSingle(p1,p2); } if (tmp1 != null && tmp2 != null) { Node* tmp = tmp1->next; if (tmp == tmp1) { if (tmp1 == tmp2) return true; else return false; } while (tmp != tmp1) { if(tmp2 == tmp1) return true; tmp = tmp->next->next; tmp1 = tmp1->next; } return false; } else return false;}
- 经典面试题收集
- 经典Sql面试题收集!!
- 经典Sql面试题收集!!
- 经典Sql面试题收集!!
- android经典面试题收集
- 经典Sql面试题收集!!
- 经典Sql面试题收集!!
- 经典Sql面试题收集!!
- 经典Sql面试题收集!!
- 经典Sql面试题收集!!!
- 经典SQL面试题收集
- 收集非常经典的Java面试题
- 经典推荐--.Net面试法宝(面试题收集)
- 经典推荐--.Net面试法宝(面试题收集)
- 经典推荐--.Net面试法宝(面试题收集)
- [收集] 经典C/C++面试题(转载)
- [收集] 经典C/C++面试题(转载) 续
- 阿里巴巴技术部面试题——经典智力问题收集
- linux命令(中)
- 第一次写博客,敬请关注
- 1天学习1个类库 UIMapView annomation 示例
- 撩开面纱看Hibernate,正点!
- 探讨SQLiteDatabase的优雅使用
- 经典面试题收集
- 解决程序运行时出现内存溢出
- 如何在Form中使用描述性弹性域
- poj2941 Homogeneous Squares
- Android 深入研究SQLite实例(三)
- Android开源组件学习: Calendar组件
- 没有人比你更在乎你的未来--李开复
- 把CRichEditCtrl的内容保存到Word文件
- SIP会话发起协议