楼主: liudj2008
跳转到指定楼层
上一主题 下一主题
收起左侧

刚出炉的Google virtual onsite面经

   
🔗
PG0321 2020-9-12 13:45:41 | 只看该作者
全局:
第一题题目应该不会给出start[]和end[]两个序列排序的结果吧?假设乱序的话,不考虑quick select,需要做两次排序,复杂度O(2*nlogn + 2 * logn)。而如果只对start[]排序,然后搞一个set依次模拟扫描一遍的话,需要O(nlogn + 2*n),其实没差,甚至可能平均意义下更优?而如果题目已经对start[]排好序的话,那直接扫描一遍应该是最好的了。
回复

使用道具 举报

🔗
wans90 2020-9-12 14:44:04 | 只看该作者
全局:
本帖最后由 wans90 于 2020-9-12 14:49 编辑
wingnut 发表于 2020-9-12 11:21
积分没188看不到哇

再加了兩個testcase
        int[][] test1 = {{0,100}, {10,20}, {30,50}};
        int[][] test2 = {{0,5}, {10,20}, {15,18}};
        int[][] test3 = {{0,5}, {0,5}, {0,5}};
        int[][] test4 = {{0,5}, {5,10}, {10,15}};

test1
[0, 1]
[0, 1, 2]
[0, 2]
test2
[0]
[1, 2]
[1, 2]
test3
[0, 1, 2]
[0, 1, 2]
[0, 1, 2]
test4
[0]
[0, 1]
[1, 2]

代碼:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies

[/i][/i][/i][/i][/i]


回复

使用道具 举报

🔗
ZionHuang 2020-9-13 07:41:07 | 只看该作者
全局:
xiaoxiao0801 发表于 2020-9-10 23:57
第一题这个思路对吗?对每个用户,找出他可能rank的范围

假如一共有个M区间,对每 ...
还不错 我想答案意思应该是如此
回复

使用道具 举报

🔗
chengliu22 2020-9-13 23:55:02 | 只看该作者
全局:
第一题可以把所有interval重新排列组合一下,让第i个start和第i个end组成新的interval。例如例子里面的[[1,100],[10,20],[30,50]]可以变成[[1,20],[10,50],[30,100]]。然后找到第n-1个interval,判断所有一开始的intervals是否和重构之后的第n-1个interval有overlapping,如果有,就加入result。
回复

使用道具 举报

🔗
jpf1983 2020-9-14 02:05:12 | 只看该作者
全局:
其实还有个法子
就是把每个区间当成一个node,如果一个区别的end大于另一个区间的start,就是一条有向的边。
然后就是topological sort了
复杂度比较高,但是比较好想。
还是二分法的路子好。
回复

使用道具 举报

🔗
linkin8834 2020-9-14 02:23:17 | 只看该作者
全局:
chengliu22 发表于 2020-9-13 23:55
第一题可以把所有interval重新排列组合一下,让第i个start和第i个end组成新的interval。例如例子里面的[[1, ...

嗯,测试了几种case,感觉这是对的,但不知道思路是怎么想出来的。。。
回复

使用道具 举报

🔗
HayleyTGKX 2020-9-14 02:25:04 | 只看该作者
全局:
隐藏部分看不了┭┮﹏┭┮求大米
回复

使用道具 举报

全局:
第一题类似于是尔吴伞? 最好的开会房间?
回复

使用道具 举报

🔗
oumizx 2020-10-3 06:35:53 | 只看该作者
全局:
xiaoxiao0801 发表于 2020-9-10 23:57
第一题这个思路对吗?对每个用户,找出他可能rank的范围

假如一共有个M区间,对每个区间[x1,x2],找出所 ...

按照这个思路写了下
  1. public class RankSearchUser {

  2.     public void solution(int[][] intervals) {
  3.         int[][] tempIntervals = Arrays.copyOf(intervals, intervals.length);
  4.         Arrays.sort(tempIntervals, (a, b) -> a[1] - b[1]);
  5.         int[] rankRangeStart = new int[intervals.length];
  6.         int[] rankRangeEnd = new int[intervals.length];
  7.         for (int i = 0; i < intervals.length; i++) {
  8.             int startUpperBound = intervals[i][0];
  9.             int start = 0;
  10.             int end = intervals.length - 1;
  11.             while (start <= end) {
  12.                 int mid = start + (end - start) / 2;
  13.                 if (tempIntervals[mid][1] >=  startUpperBound) {
  14.                     end = mid - 1;
  15.                 } else {
  16.                     start = mid + 1;
  17.                 }

  18.                 int lastValidIdxForStart = end;
  19.                 rankRangeStart[i] = lastValidIdxForStart + 2;
  20.             }
  21.         }

  22.         Arrays.sort(tempIntervals, (a, b) -> a[0] - b[0]);
  23.         for(int i = 0; i < intervals.length; i++) {
  24.             int endLowerBound = intervals[i][1];
  25.             int start = 0;
  26.             int end = intervals.length - 1;
  27.             while (start <= end) {
  28.                 int mid = start + (end - start) / 2;
  29.                 if (tempIntervals[mid][0] <= endLowerBound) {
  30.                     start = mid + 1;
  31.                 } else {
  32.                     end = mid - 1;
  33.                 }

  34.                 int firstValidIdx = start;
  35.                 rankRangeEnd[i] = firstValidIdx;
  36.             }
  37.         }

  38.         for (int i = 1; i <= intervals.length; i++) {
  39.             String s = "";
  40.             s += "rank " + i + ":";
  41.             for (int j = 0; j < intervals.length; j++) {
  42.                 if (i >= rankRangeStart[j] && i <= rankRangeEnd[j]) {
  43.                     s += "u" + String.valueOf(j + 1) + ",";
  44.                 }
  45.             }
  46.             System.out.println(s);
  47.         }
  48.     }

  49.     public static void main(String[] args) {
  50.         RankSearchUser solution = new RankSearchUser();
  51.         int[][] intervals = new int[][]{{0, 100}, {10, 20}, {30, 50}};
  52.         solution.solution(intervals);
  53.     }
  54. }
复制代码


感觉面试的时候真的很难想到加写出来
回复

使用道具 举报

🔗
beyond2001 2020-10-11 11:05:28 | 只看该作者
全局:
请问楼主,virtual interview是用 google doc写代码吗还是用支持语法的editor?
回复

使用道具 举报

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

本版积分规则

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