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

电面面经一枚 顺带求人品

全局:

2015(10-12月) 码农类General 硕士 全职@google - 网上海投 - 技术电面  | | Other | 在职跳槽

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

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

x
第一次发面经~为进入G家攒人品 求bless

没有针对简历提问, 只有一道算法题 ---- 已知一个Lis
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
不是最优 。 抛砖引玉。我用了一个linkedlist 和 hashmap。

上一篇:12.17 Microsoft onsite
下一篇:Google 电面
推荐
zealot5209 2015-12-19 20:42:43 | 只看该作者
全局:
能不能不在set上操作, 用hashMap记录visited, fast指向的元素 !visited && in set 就继续走,如果slow fast间距离达到set的size就说明找到了; 否则,看是因为什么fail的:如果是因为visited,就移动slow, 等slow经过重复的元素就停,继续移动fast; 如果是因为遇到了set里没有的元素,就slow和fast都指向后面的元素
回复

使用道具 举报

全局:
写了下代码,时间和空间复杂度都是O(n),其实这个题就是sliding window
  1. public class SublistEqualsSet {

  2.         public static boolean isSublistEqualsSet(List<Integer> list,
  3.                         Set<Integer> set) {
  4.                 if (set == null || list == null) {
  5.                         return false;
  6.                 }
  7.                 if (set.size() == 0) {
  8.                         return true;
  9.                 }
  10.                 if (list.size() == 0) {
  11.                         return false;
  12.                 }
  13.                 int start = 0;
  14.                 int pos = 0;
  15.                 System.out.println(set.size());
  16.                 Set<Integer> tmp = new HashSet<Integer>();
  17.                 while (pos < list.size()) {
  18.                         int cur = list.get(pos);
  19.                         if (set.contains(cur)) {
  20.                                 while (start < pos && tmp.contains(cur)) {
  21.                                         tmp.remove(list.get(start));
  22.                                         start++;
  23.                                 }
  24.                                 tmp.add(cur);
  25.                                 if (tmp.size() == set.size()) {
  26.                                         return true;
  27.                                 }
  28.                         } else {
  29.                                 start = pos + 1;
  30.                                 tmp.clear();
  31.                         }
  32.                         pos++;
  33.                 }

  34.                 return false;
  35.         }

  36.         public static void main(String[] args) {
  37.                 List<Integer> list = new ArrayList<Integer>(
  38.                                 Arrays.asList(1, 2, 3, 2, 4, 1));
  39.                 Set<Integer> set = new HashSet<Integer>();
  40.                 set.add(1);
  41.                 set.add(2);
  42.                 set.add(3);
  43.                 set.add(4);
  44.                 System.out.println(isSublistEqualsSet(list, set));
  45.         }
  46. }
复制代码
回复

使用道具 举报

推荐
ninacc 2015-12-20 17:39:43 | 只看该作者
全局:
O(n^2) 和 O(n) 不知道有没问题。祝楼主顺利拿到Onsite~!! 求大家指导代码,谢谢!
        public static boolean subList(HashSet<Integer> set,int[] nums){
                if(set==null || nums ==null) return false;
                int left = 0,right=0;
                HashSet<Integer> visited = new HashSet<Integer>();
                for(;right<nums.length;right++){
                        if(!set.contains(nums[right])){
                                visited.clear();
                                continue;
                        }else{
                                if(visited.contains(nums[right])){
                                        while(left<right && nums[left]!=nums[right]){
                                                visited.remove(nums[left]);
                                                left++;
                                        }
                                        left++;
                                }else{
                                        visited.add(nums[right]);
                                        if(visited.size()==set.size()) return true;
                                }
                        }
                }
                return false;
        }




回复

使用道具 举报

🔗
fsd123 2015-12-18 21:46:31 | 只看该作者
全局:
一一对应的具体要求是什么? sublist 里没有 set 中没有的元素?sublist 中不允许有重复元素?

如果两个的答案都是“是”,觉得似乎可以用两个指针指向 list ,初始化的时候将两个指针放在第一个在 set 中存在元素的所在位置,然后快的指针向后移动,如果指向的元素在 set 存在就继续移动,并且从 set 中删除该元素。如果循环过程中 set 为空,则找到 sublist ,否则快的指针指向的元素在 set 中不存在,这样移动慢指针恢复 set ,之后再同时移动两个指针到之后出现的在 set 包含的元素的位置。

时间复杂度 O(n),空间复杂度 O(1)

P.S. Google 不是一般都两轮电面么?
回复

使用道具 举报

🔗
 楼主| xiaomiaoaoao 2015-12-18 21:57:28 | 只看该作者
全局:
fsd123 发表于 2015-12-18 21:46
一一对应的具体要求是什么? sublist 里没有 set 中没有的元素?sublist 中不允许有重复元素?

如果两个 ...

List里可以有重复的, 找出的sublist是必须没有重复元素的的(因为SET里也没有重复的), sublist里不能有SET里没有的元素(两个要互相一一对应)

记得以前上学的时候是两轮电面,我是在职逃难的....突然失眠中
回复

使用道具 举报

🔗
fsd123 2015-12-18 22:11:17 | 只看该作者
全局:
xiaomiaoaoao 发表于 2015-12-18 21:57
List里可以有重复的, 找出的sublist是必须没有重复元素的的(因为SET里也没有重复的), sublist里不能 ...

那我理解对了。

twitter 么。。逃难。。
回复

使用道具 举报

🔗
 楼主| xiaomiaoaoao 2015-12-18 22:45:01 | 只看该作者
全局:
fsd123 发表于 2015-12-18 22:11
那我理解对了。

twitter 么。。逃难。。

你说的是list里指针吧 我忘了可以从set里删除 复杂度比你的高了 也写得麻烦了 sigh... 似乎只能求放水了...
回复

使用道具 举报

🔗
JohnsonMS 2015-12-19 04:09:23 | 只看该作者
全局:
Good idea, 学习了, 使用伸缩方式做
回复

使用道具 举报

🔗
cbmbbz 2015-12-19 11:31:56 | 只看该作者
全局:
fsd123 发表于 2015-12-18 21:46
一一对应的具体要求是什么? sublist 里没有 set 中没有的元素?sublist 中不允许有重复元素?

如果两个 ...

我没理解错的话...你说的方法不适合这个test case:list是abcbda,set是abcd,扫list的时候扫到第二个b,就会从d开始,而错过了cbda这个答案
我觉得这题是leetcode Longest Substring Without Repeating Characters的变体,需要用到hashmap的
回复

使用道具 举报

🔗
fhq843 2015-12-19 11:37:53 | 只看该作者
全局:
set 既然无序是不是就是set的任一permutation 是list的substring
回复

使用道具 举报

🔗
fsd123 2015-12-19 14:11:05 | 只看该作者
全局:
cbmbbz 发表于 2015-12-19 11:31
我没理解错的话...你说的方法不适合这个test case:list是abcbda,set是abcd,扫list的时候扫到第二个b, ...

啊,是的。确实过不了这个 case ,那就修改下移动策略

初始化 slow 和 fast 为 head,进入循环,判定 fast 所指是否在 set 中,在就从 set 移除,并移动 fast ,否则判定 slow 和 fast 是否指向同一个,是则同时移动,否则将 slow 所指加入 set ,并只移动 slow。

这样就能覆盖掉你说的这个 case 了,复杂度还是没变

而且实现后发现比原来的代码还简单了。囧
回复

使用道具 举报

🔗
fsd123 2015-12-19 14:11:52 | 只看该作者
全局:
cbmbbz 发表于 2015-12-19 11:31
我没理解错的话...你说的方法不适合这个test case:list是abcbda,set是abcd,扫list的时候扫到第二个b, ...

不过我没明白为什么要用 hashmap ?
回复

使用道具 举报

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

本版积分规则

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