查看: 5681| 回复: 10
跳转到指定楼层
上一主题 下一主题
收起左侧

[高频题] 可跳过的Iterator

全局:
高频题
公司名称: google

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

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
本帖最后由 14417335 于 2019-4-18 23:35 编辑

一道狗家面经题,附上自己之前写的test case
您好!
本帖隐藏的内容需要积分高于 200 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 200 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies



评分

参与人数 9大米 +87 收起 理由
hua88 + 1 赞一个
tinlittle + 3 上次路过忘了加米,实锤干货
mizukou + 2 很有用的信息!
fred365 + 1 给你点个赞!
Killua1222 + 2 很有用的信息!

查看全部评分


上一篇:迷宫最少转弯次数
下一篇:关于string的处理,需要娴熟C-style的string吗
全局:
没有足够的米
回复

使用道具 举报

🔗
tank_z 2019-5-1 10:47:04 | 只看该作者
全局:
发个java的implementation


  1. import java.util.Arrays;
  2. import java.util.HashMap;
  3. import java.util.Iterator;
  4. import java.util.Map;


  5. public class SkipIterator {

  6.     Iterator<Integer> iterator;
  7.     Map<Integer, Integer> counter = new HashMap();
  8.     Integer cache;

  9.     public SkipIterator (Iterator<Integer> iterator) {
  10.         this.iterator = iterator;
  11.     }

  12.     boolean hasNext() {
  13.         while(iterator.hasNext()) {
  14.             cache = iterator.next();
  15.             if (counter.containsKey(cache)) {
  16.                 counter.put(cache, counter.get(cache) - 1);
  17.                 if (counter.get(cache) == 0) {
  18.                     counter.remove(cache);
  19.                 }
  20.             } else {
  21.                 break;
  22.             }
  23.         }
  24.         return cache != null;
  25.     }

  26.     int next() {
  27.         int ans = cache;
  28.         cache = null;
  29.         return ans;
  30.     }

  31.     void skip(int num) {
  32.         counter.put(num, counter.getOrDefault(num, 0) + 1);
  33.     }


  34.     public static void main(String[] args) {
  35.         int[] arr = new int[]{1, 2, 3, 4, 5, 6, 5, 6, 2, 3};
  36.         SkipIterator skipIterator = new SkipIterator(Arrays.stream(arr).iterator());
  37.         skipIterator.skip(5);
  38.         skipIterator.skip(5);

  39.         // expect: 1, 2, 3, 4, 6, 6, 2, 3
  40.         while(skipIterator.hasNext()) {
  41.             System.out.println(skipIterator.next());
  42.         }
  43.         System.out.println(skipIterator.hasNext());
  44.     }
  45. }
复制代码

补充内容 (2019-5-18 10:43):
代码里面 hasNext 有问题,如果skip的是最后一个数字3, cache 不会变成null,会把3 打印出来的。
简单的fix方式就在hasNext() if(counter.containsKey(cache))里把cache置为null

评分

参与人数 2大米 +3 收起 理由
sherry001 + 2 很有用的信息!
孙行者 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
sherry001 2019-5-13 08:07:15 | 只看该作者
全局:
tank_z 发表于 2019-5-1 10:47
发个java的implementation
[mw_shl_code=java,true]

Hmmm. 代码好像不太对,如果直接call next()的话会return null的,得先执行一下hasNext()
回复

使用道具 举报

🔗
tank_z 2019-5-13 08:44:39 | 只看该作者
全局:
sherry001 发表于 2019-5-13 08:07
Hmmm. 代码好像不太对,如果直接call next()的话会return null的,得先执行一下hasNext()

Iterator 在call next() 之前不就是得先call hasNext()吗, 不过也可以把hasNext()里的Logic移到next()里可能那样更make sense一点
回复

使用道具 举报

🔗
sherry001 2019-5-13 10:59:04 | 只看该作者
全局:
tank_z 发表于 2019-5-13 08:44
Iterator 在call next() 之前不就是得先call hasNext()吗, 不过也可以把hasNext()里的Logic移到next()里 ...

啊,刚看到你在main里面写了,不过我觉得这些logic在SkipInterator class里面更好一些
回复

使用道具 举报

🔗
squintjet811 2019-5-13 12:10:37 | 只看该作者
全局:
想问一下这个不能用linked list实现么?
回复

使用道具 举报

🔗
fred365 2019-5-13 15:21:48 | 只看该作者
全局:
什么是神秘doc o.o
回复

使用道具 举报

🔗
xjdsg 2019-5-17 11:51:47 | 只看该作者
全局:
tank_z 发表于 2019-5-1 10:47
发个java的implementation
[mw_shl_code=java,true]

代码里面 hasNext 有问题,如果skip的是最后一个数字3, cache 不会变成null,会把3 打印出来的。
可以把skip(5), skip(5) 换成skip(3), skip(3),结果是不对的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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