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

11/09 Google Onsite

全局:

2015(10-12月) 码农类General 硕士 全职@google - Other - Onsite  | | Other | 应届毕业生

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

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

x
多半黑了,发一个面经造福社会.

1. Flip game (allPossible moves, canWin)
2. Find Camel:
   Input: "FooBar&
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
0 08:17):
第五题O(N)解法: 2K windows, Quick Select, throw K away.

评分

参与人数 1大米 +2 收起 理由
Self_Learner + 2 给你点个赞!

查看全部评分


上一篇:linkedin 電面
下一篇:NVIDIA intern phone 面经

本帖被以下淘专辑推荐:

全局:
写了最后一题2K WINDOW的代码

  1. public class QuickSelect {

  2.     public static List<Integer> topK(int[] nums, int k) {
  3.         List<Integer> result = new ArrayList<Integer>();
  4.         if (nums == null || nums.length < k) return result;
  5.         int n = nums.length;
  6.         int i = 0;
  7.         for ( ; i < k; i++) result.add(nums[i]);
  8.         while (i < n) {
  9.             int j = 0;
  10.             for (; j < k && i + j < n; j++) {
  11.                 result.add(nums[i + j]);
  12.             }
  13.             quickSelect(result, k);
  14.             i += j;
  15.         }
  16.         return result;
  17.     }
  18.    
  19.     private static void quickSelect(List<Integer> list, int k) {
  20.         selectHelper(list, 0, list.size() - 1, k);
  21.         List<Integer> rest = new ArrayList<Integer>();
  22.         for (int i = k; i < list.size(); i++) rest.add(list.get(i));
  23.         list.removeAll(rest);
  24.     }
  25.    
  26.     private static void selectHelper(List<Integer> list, int start, int end, int k) {
  27.         int randomIndex = start + (int)(Math.random() * (end - start + 1));
  28.         swap(list, end, randomIndex);
  29.         int i = start - 1, j = start, pivot = list.get(end);
  30.         while (j < end) {
  31.             if (list.get(j) >= pivot) {
  32.                 swap(list, ++i, j);
  33.             }
  34.             j++;
  35.         }
  36.         swap(list, ++i, end);
  37.         int leftSize = i - start + 1;
  38.         if (leftSize == k) return;
  39.         if (leftSize < k) selectHelper(list, i + 1, end, k - leftSize);
  40.         else selectHelper(list, start, i - 1, k);
  41.     }
  42.    
  43.     private static void swap(List<Integer> list, int i, int j) {
  44.         int temp = list.get(i);
  45.         list.set(i, list.get(j));
  46.         list.set(j, temp);
  47.     }
  48.    
  49.     public static void main(String[] args) {
  50.         int[] nums = {9,0,3,2,8,1,2,3,4,5,6,7};
  51.         List<Integer> list = topK(nums, 3);
  52.         for (int d : list) {
  53.             System.out.print(d + " ");
  54.         }
  55.         System.out.println();
  56.             
  57.     }
  58. }
复制代码
回复

使用道具 举报

全局:
find camel就是brute force的方法?
public class FindCamel {

        public static void main(String[] args) {
                String[] strs = {"FooBar", "FoBa", "FooBarFoo"};
                String res = findCamel(strs, "FBF");
                System.out.println(res);
        }
       
        public static String findCamel(String[] strs, String pattern) {
                if (strs == null || strs.length == 0) {
                        return "";
                }
               
                for (String str : strs) {
                        StringBuilder sb = new StringBuilder();
                        for (char c : str.toCharArray()) {
                                if (c >= 'A' && c <= 'Z') {
                                        sb.append(c);
                                }
                        }
                        if (pattern.equals(sb.toString())) {
                                return str;
                        }
                }
               
                return "";
        }
}
回复

使用道具 举报

推荐
returning 2016-1-10 22:43:18 | 只看该作者
全局:
RagingSword 发表于 2015-11-20 08:39
有N/K 个batches, 所以是O(K * N / K) = O(K)

补充内容 (2015-11-20 08:39):

感觉不行啊,假设有N/k个batch,每个batch的长度为k,所以,每compare两个batch的时间复杂度是k,从N/k个batch中间选出第m大的时间复杂度是N/k, 所以总的复杂度就是k*N/k。
但是,你如何保证确实有那么一个batch,其k个数对应着要求的k个数呢?
谢谢了
回复

使用道具 举报

🔗
queeniejing 2015-11-20 06:45:19 | 只看该作者
全局:
谢谢LZ 请问下第五题 O(n) 是怎么做啊
回复

使用道具 举报

🔗
宝贝忆彼岸 2015-11-20 06:52:46 | 只看该作者
全局:
同问第五题O(N)解法
回复

使用道具 举报

🔗
@南岸的风 2015-11-20 06:56:29 | 只看该作者
全局:
楼主没有hr收到消息嘛
回复

使用道具 举报

🔗
 楼主| Nero_hu 2015-11-20 08:14:20 | 只看该作者
全局:
@南岸的风 发表于 2015-11-20 06:56
楼主没有hr收到消息嘛

没有...问了下说这周进HC,感觉GG了
回复

使用道具 举报

🔗
 楼主| Nero_hu 2015-11-20 08:15:29 | 只看该作者
全局:
第五题O(N)解法: 2K windows, Quick Select, throw K away.
回复

使用道具 举报

🔗
stonezms 2015-11-20 08:27:45 | 只看该作者
全局:
楼主能稍微详细讲下O(N)怎么实现的么?
是在这个2k window里用quick select么?这个不是O(k)么?
回复

使用道具 举报

🔗
RagingSword 2015-11-20 08:39:04 | 只看该作者
全局:
stonezms 发表于 2015-11-20 08:27
楼主能稍微详细讲下O(N)怎么实现的么?
是在这个2k window里用quick select么?这个不是O(k)么?

有N/K 个batches, 所以是O(K * N / K) = O(K)

补充内容 (2015-11-20 08:39):
打错了
O(K * N / K) = O(N)
回复

使用道具 举报

🔗
 楼主| Nero_hu 2015-11-20 09:11:24 | 只看该作者
全局:
RagingSword 发表于 2015-11-20 08:39
有N/K 个batches, 所以是O(K * N / K) = O(K)

补充内容 (2015-11-20 08:39):

正解.....
回复

使用道具 举报

🔗
bobzhang2004 2015-11-20 09:30:58 | 只看该作者
全局:
第五题2k window不行吧,如果去后面k个全部小于前面k个,岂不是都会被去除,然后前面的k个会被移走?
回复

使用道具 举报

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

本版积分规则

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