发几个面试题

healer_kx 2010-08-20 12:26:17
发几个我最近面试遇到的题目

1.
两个链表相交,有节点,确定节点【位置】。

2.
一棵二叉树,已知两个节点,确定它们的最近公共父节点。


3.
从鼠标点击开始,一直到窗口处理函数,中间比较详细的流程,要细致到涉及到了哪些API,和消息队列的从属关系,等。
知道多少说多少,我基本忘得差不多了。

4.
有两个数组,长度均为N,且都排好顺序【顺序方向一致,就是都是从小到大,或者都是从大到小】
例如
[1 2 3 4 6]
[0 5 7 8 9]
要找两个里面第N小的数字,这里就是4呗~要求代码~

5.
防止内存泄露的办法,防止栈内存溢出的办法,防止堆内存溢出的办法。

6.
其他的也不是记不住了,只是很难一句两句描述清楚。。。。 。。。。
就当散分了。
...全文
3656 117 打赏 收藏 转发到动态 举报
写回复
用AI写文章
117 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjf11547 2010-12-11
  • 打赏
  • 举报
回复
无语了,基础都忘记了,变成就会干活,高深的技术用过,但是就是不知道是什么名字。就像用数据库连接池,当处被一个同行忽悠了半天,后来回家一查,。。。。我都用了N个项目了。太闭塞了,愚蒙
celeron729 2010-12-02
  • 打赏
  • 举报
回复
“两个链表相交,有节点,确定节点【位置】。”

这个太极品了,无语!
xl1016807272 2010-12-02
  • 打赏
  • 举报
回复
我想每一个把一个分枝到根的POINTER都保存一遍~~,然后把这些POINTER都置成一个dummy_node 然后,从另一枝开始回溯就,在检查(pointer==dummy_node)就已经是最好地办法了
月夜乘风 2010-08-26
  • 打赏
  • 举报
回复
学习了~
healer_kx 2010-08-26
  • 打赏
  • 举报
回复
帖子里面是有一些题目的正确答案的,有兴趣的同学,建议把别人的说法也过一下。
天天都在码字 2010-08-26
  • 打赏
  • 举报
回复
第一题:如果两个链表有交点地话,那么在这个交点应该有2个不同的指针分别指向不同的下一结点,所以,只要遍历一个表,判断每个结点的两个指针是否为空,只要有一个为空,则该结点不是交点,若两个指针都非空,可以判断这个节点是交点。
luyan627 2010-08-25
  • 打赏
  • 举报
回复
...............
shwarpine 2010-08-25
  • 打赏
  • 举报
回复
Mark.谢谢楼主。
LiuQijun 2010-08-25
  • 打赏
  • 举报
回复
要是是双向链表,没有环就简单了。相交说明最后的元素肯定一样,从后往前找,找到两个不等的,则前一次相等的就是了。
xjj571249 2010-08-25
  • 打赏
  • 举报
回复
那个分,谢谢!
ybbpgfjtey 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 95 楼 ybbpgfjtey 的回复:]

第4个确实可以空间0(0),时间O(logn)解决。

首先比较两数组头尾,如果a数组尾小于b数组头,则第N小的数字就是a[n-1]。
否则,比较a[n-2]与b[0],若b[0]小于a[n-2],则第N小的数字是a[n-2],
否则,比较a[n-2]与b[1],若b[1]小于a[n-2],则第N小的数字是b[0],
……
每次从较大的数字所在的数组移位,并与另一数组中的数字比较,若……
[/Quote]


另外,还可稍作优化,首先比较a[n-1]与b[n-1]取其较小者与另一数组的头进行比较,以避免最坏情况的发生。

对于:
[1 2 3 4 6]
[0 5 7 8 9]

第1次比较: 6 < 9
则取6与另一数组头比较

第2次比较: 6 > 0

则6移位

第3次比较 4 < 0

则第N小的数字就是4。

j2eeoriented 2010-08-24
  • 打赏
  • 举报
回复
happy_lihuan 2010-08-24
  • 打赏
  • 举报
回复
链表题:
1、如果是双向链表的话,因为每个节点都知道它的上一个节点和下一个节点,因此公共节点应该在两个链表的开头和结尾。只需要找4次就可以找到。
2、如果是单向链表的话,公共节点一下所有的节点应该都是公共的(可以画图说明问题)。因此可以采用一个表二分法一个表遍历。不过算法复杂度还是N的平方。

二叉树:
因为每个节点都知道自己的父节点、左子节点和右子节点。因此
1、先找出两个节点的深度a,b。
2、以深度最小的起点,进行向上遍历,每遍历到一个父节点然后向改父节点的其他子节点遍历。
因此算法复杂度应该是 logN 的平方。
  • 打赏
  • 举报
回复
面试题好难啊,是那家公司啊?
playgod000 2010-08-24
  • 打赏
  • 举报
回复
上面那贴把++放后面.
playgod000 2010-08-24
  • 打赏
  • 举报
回复
4.
有两个数组,长度均为N,且都排好顺序【顺序方向一致,就是都是从小到大,或者都是从大到小】
例如
[1 2 3 4 6]
[0 5 7 8 9]
要找两个里面第N小的数字,这里就是4呗~要求代码~


template<typename T, size_t N>
T& get_index(T (&a)[N], T (&b)[N]){
T* p;
size_t ia= 0, ib= 0, tn= N;
while(tn--) p= a[ia]>b[ib]? &a[++ia]: &b[++ib];
//不可能发生越界, 因为 N > N == false;
return *p;
}

playgod000 2010-08-24
  • 打赏
  • 举报
回复
2叉树由小到大排列.
由较小的节点向上遍历,取比另一个节点大的节点 的前一个节点.O(h); 高度h= log n;

node* na= min(节点a,节点b);
node* nb= max(节点a,节点b);

node* find= na;
for(node* parent_find= find->parent();
!parent_find->isnil() && parent_find->val() < nb->val();
parent_find=parent_find->parent() )
find= parent_find;

return find;

//lz请给分
浮沉-- 2010-08-24
  • 打赏
  • 举报
回复
学习中…
happynwt 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 healer_kx 的回复:]
引用 19 楼 happynwt 的回复:

这些题好像和前几天有一个去IBM的面试题一样呢

你确定IBM的面试题能有这么难?
[/Quote]

不确定,但确实看到人家那么说的。同样的问题,是去了IBM。
tmxk12388 2010-08-24
  • 打赏
  • 举报
回复
有种数据结构叫并查集,最大的作用就是求二叉树中两个节点的最近公共父节点
具体是怎么求的我忘了。。。。
加载更多回复(93)

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧