📣 独立日限时特惠: VIP通行证立减$68
回复: 7
跳转到指定楼层
上一主题 下一主题
收起左侧

北京 airbnb 电面followup 挂

全局:

2018(7-9月) 码农类General 本科 全职@airbnb - 猎头 - 技术电面  | | Fail | 在职跳槽

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

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

x
北京的airbnb
oa 2,就是按照一组数据按照host_id分页。
我实现的思路能做到最坏情况下,不会遍历整个数组。
电面follow up:
优化实现,
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
,我也挂了。
电话follow up挂很少见吧。但我不知道我的follow up这般难。。。。

上一篇:uber freight 昂赛特跪经
下一篇:回报地里,上个月的BB 6轮游

本帖被以下淘专辑推荐:

  • · airbnb|主题: 12, 订阅: 2
推荐
 楼主| zhaoqing 2018-7-31 19:31:55 | 只看该作者
全局:
#不知道怎么修改,就采用回帖的方式详细叙述下#
是电话follow up。题目是:full-stack coding challenge 2
就是一组排序的host_id,然后分页,每页尽量不要重复host_id,如无,从数组开头填充。

我的代码能处理最坏情况,即无需每次遍历,在不同host_id寻找完后就停止。

电话follow up:
解释题目思路:大概说了下题意,说了下思路。
问时间复杂度:O(N*N)(N是个数)。
提出del a[index],list.pop(0)的时间复杂度,我说O(N),python中没有iterator remove,可以使用链表
让我优化:开始磕磕绊绊,思路混乱,嘴快说出了好几个地方,最后想到类似 k list merge的方式。每个host_id 后面跟着对应数组中的索引队列。
又是磕磕绊绊最后算出时间复杂度(面试官说不关心page number,m为host_id的种类数量):N*m*lg(m)。
刚写出时间复杂度,面试官又说还可以继续优化吗?
我说:可能不需要每次都排序,可以用一个堆,然后拿出page_number个,再插入page_number个。
面试官说需要拿出page_number个再插入吗?我说:需要。
面试官说时间太久(已经40分钟了),就结束了。
然后从猎头哪儿知道挂了,说算法不行。

后来知道我是第二个follow up挂的,意思是一般人不会再follow up上挂,难道airbnb面试真这么难?但一亩三分地的面经没看出来啊。
回复

使用道具 举报

🔗
zhqfox 2018-8-1 01:23:37 | 只看该作者
全局:
zhaoqing 发表于 2018-7-31 19:31
#不知道怎么修改,就采用回帖的方式详细叙述下#
是电话follow up。题目是:full-stack coding challenge 2 ...

感觉类似利口二流,做完后记一个长度,然后分页,复杂度应该是O(N)
回复

使用道具 举报

🔗
 楼主| zhaoqing 2018-8-1 01:25:54 | 只看该作者
全局:
什么叫利口二流?这道题目地里有,但都是n*n的复杂度,貌似他们电面也都过了
回复

使用道具 举报

🔗
zhqfox 2018-8-3 06:44:00 | 只看该作者
全局:
zhaoqing 发表于 2018-8-1 01:25
什么叫利口二流?这道题目地里有,但都是n*n的复杂度,貌似他们电面也都过了

我找到了那道题,不知道我的理解对不对。
题意是有一组数据,每个数据有host_id,score等等,这组数据已经按照score排好序了。然后,题目要你对这组数据进行分页,尽可能让每一页出现的host_id的次数少。
其实这很像LC26那道题,就是把重复的数据放到后面。

为了简单起见,我把一组数据抽象成了一组数字,如果是数据类型,处理方法也是一样。
  1. public class DisplayPages {

  2.         public static void main(String[] args) {
  3.                 int[] ids1 = {1,2,3,4,5,6,7,8,9};
  4.                 int[] ids2 = {1,2,2,2,2,2,2,2,2};
  5.                 int[] ids3 = {1,2,2,2,3,2,1,2,1};
  6.                 int[] ids4 = {3,2,3,2,3,2,3,2,3};

  7.                 DisplayPages dp = new DisplayPages();
  8.                 printNestedList(dp.displayPages(ids1));
  9.                 printNestedList(dp.displayPages(ids2));
  10.                 printNestedList(dp.displayPages(ids3));
  11.                 printNestedList(dp.displayPages(ids4));
  12.         }

  13.         public List<List<Integer>> displayPages(int[] ids) {
  14.                 int size = 3;
  15.                 List<List<Integer>> res = new ArrayList<>();
  16.                
  17.                 int end = 0, n = ids.length;
  18.                 Set<Integer> map = new HashSet<>();
  19.                 for (int i = 0; i < n; i++) {
  20.                         if (map.isEmpty() || !map.contains(ids[i])) {
  21.                                 map.add(ids[i]);
  22.                                 swap(ids, end++, i);
  23.                         }
  24.                 }
  25.                
  26.                 List<Integer> page = new ArrayList<>();
  27.                 for (int id : ids) {
  28.                         page.add(id);
  29.                         if (page.size() == size) {
  30.                                 res.add(page);
  31.                                 page = new ArrayList<>();
  32.                         }
  33.                 }
  34.                
  35.                 return res;
  36.         }
  37.        
  38.         private void swap(int[] nums, int i, int j) {
  39.                 int tmp = nums[i];
  40.                 nums[i] = nums[j];
  41.                 nums[j] = tmp;
  42.         }
  43.        
  44.         private static void printNestedList(List<List<Integer>> lists) {
  45.                 System.out.println("*------------------------------------------------------*");
  46.                 for (List<Integer> list : lists) {
  47.                         System.out.print("[ ");
  48.                         for (Integer elem : list) {
  49.                                 System.out.print(elem + ", ");
  50.                         }
  51.                         System.out.print(" ]");
  52.                         System.out.println();
  53.                 }
  54.         }
  55. }
复制代码


结果:
*------------------------------------------------------*
[ 1, 2, 3,  ]
[ 4, 5, 6,  ]
[ 7, 8, 9,  ]
*------------------------------------------------------*
[ 1, 2, 2,  ]
[ 2, 2, 2,  ]
[ 2, 2, 2,  ]
*------------------------------------------------------*
[ 1, 2, 3,  ]
[ 2, 2, 2,  ]
[ 1, 2, 1,  ]
*------------------------------------------------------*
[ 3, 2, 3,  ]
[ 2, 3, 2,  ]
[ 3, 2, 3,  ]

这样复杂度就是O(n)
欢迎拍砖
回复

使用道具 举报

🔗
 楼主| zhaoqing 2018-8-3 09:08:20 | 只看该作者
全局:
zhqfox 发表于 2018-8-3 06:44
我找到了那道题,不知道我的理解对不对。
题意是有一组数据,每个数据有host_id,score等等,这组数据已 ...

不太对,先找出所有不同的id,然后不足的话再从头挨个填充,里面不同id需要保持顺序
回复

使用道具 举报

🔗
zhqfox 2018-8-4 00:33:40 | 只看该作者
全局:
zhaoqing 发表于 2018-8-3 09:08
不太对,先找出所有不同的id,然后不足的话再从头挨个填充,里面不同id需要保持顺序

这个其实就是数组去重问题。一遍循环就能做完,还能保证顺序。你做一下LC26就知道了。
回复

使用道具 举报

🔗
 楼主| zhaoqing 2018-8-4 02:25:26 | 只看该作者
全局:
zhqfox 发表于 2018-8-4 00:33
这个其实就是数组去重问题。一遍循环就能做完,还能保证顺序。你做一下LC26就知道了。

但你要做 总和除以每页数量 这么多次
回复

使用道具 举报

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

本版积分规则

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