一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 738|回复: 1
收起左侧

[算法题] 问一道L 家的高频面经题吧

[复制链接] |试试Instant~ |关注本帖
butterwang 发表于 2015-11-18 04:37:24 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
求内容排序好的iterator的操作,union, intersect。也就是说实现先面两个方法。
Iterable<Integer> union(Iterator<Integer> a, Iterator<Integer>b) {}
Iterable<Integer> intersect(Iterator<Integer> a, Iterator<Integer> b) {}

其实题目本身并不难,尤其是如果输入输出是array, list 的话。关键是如果是iterator怎么办?call 了next() 指针就已经已走了啊?哪位高手能提供一个Java的代码啊?
stellari 发表于 2015-11-19 08:55:31 | 显示全部楼层
输入是数组还是Iterator其实差别不大,因为你只需要正向扫描a和b即可,不需要回头看之前的内容。至于你说的“call了next()以后指针就已经已走了啊”,这确实是事实,但是我没理解这一点会引出什么问题。每次调用next()时,你肯定是会将这次调用next()的结果保存到一个变量中的,不会造成任何数据未处理的情况。

比如对
a: 12559
b: 55789
做intersect,

ca = a.next(); // 1
cb = b.next(); // 5
然后比较ca和cb的值,发现ca小,那么再ca=a.next(); == 2
ca还是小,再ca=a.next(); == 5
这下ca和cb相等了,那么把这个5加入结果。
于是再
ca = a.next();
cb = b.next();
发现两者又都是5,此时发现和结果的最后一个数字5重复,于是不做任何事。然后再
ca = a.next();
cb = b.next();
。。。
以此循环直至a和b都没有next为止。
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-8 23:03

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表