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

Yelp onsite 面经,跪了一道题

🔗
 楼主| zsz1990ustc 2016-4-29 14:21:44 | 只看该作者
全局:
huangrui199126 发表于 2016-4-27 01:55
非常同意楼主的那句话!大家要团结!!我马上去onsite ,店面也全是原题,都是感谢大家的智慧!求问楼主后来 ...

不幸收到拒信了。。祝你好运啊!!
回复

使用道具 举报

🔗
 楼主| zsz1990ustc 2016-4-29 14:22:00 | 只看该作者
全局:
huangrui199126 发表于 2016-4-27 01:55
非常同意楼主的那句话!大家要团结!!我马上去onsite ,店面也全是原题,都是感谢大家的智慧!求问楼主后来 ...

不幸收到拒信了。。祝你好运啊!!
回复

使用道具 举报

🔗
 楼主| zsz1990ustc 2016-4-29 14:22:42 | 只看该作者
全局:
qjw1992 发表于 2016-4-29 13:55
请问楼主面的是哪个组的呀?

做后端的应该是。别人帮我推的,我也不知道哪个组。。
回复

使用道具 举报

🔗
Janet.Ding 2016-4-30 05:34:54 | 只看该作者
全局:
我觉得可以用BFS,基本数据类型设置为[not seen movie(set), movie schedule(list)],然后在每个时刻根据这个时刻上映的电影进行遍历,根据上面的例子可以写成这样
第一层在14点:[(B,C,D), [A]], [(A,C,D), [B]], [(A,B,D), [C]], [(A,B,C), [D]]
第二层在15点:[(C,D), [A,B]], [(B,D), [A,C]], [(B,C), [A,D]], ...
直到最后一层17点,如果有则返回movie schedule,否则返回false
回复

使用道具 举报

全局:
zsz1990ustc 发表于 2016-4-29 14:22
做后端的应该是。别人帮我推的,我也不知道哪个组。。

哎,感觉楼主很牛啊。。。yelp onsite果然难啊
回复

使用道具 举报

全局:
想到一种greedy的做法,是把问题表示成矩阵,每行代表一个电影,每列代表一个时间段。1代表这个时间这个电影可以放,0代表不能放。然后每次迭代都去找行sum和列sum中最小的。如果最小sum是1就挑那个1的元素。如果最小sum不为1就挑另外一个维度最小对应的元素。挑中之后把对应的行和列删掉,继续迭代。。过程中一旦某行或列的sum为0就throw exception。不晓得靠不靠谱
回复

使用道具 举报

🔗
BrilliantBean 2016-5-13 05:38:56 | 只看该作者
全局:
楼主有详细的解答吗 关于看电影的那道题
回复

使用道具 举报

🔗
bcc 2016-10-5 01:44:45 | 只看该作者
全局:
Greedy O(n)方法:电影那个题可以先从最短的时间列表看起,例如,电影C: 14, 15 随便选一个,电影c时间确定,然后把那个时间点从所有的list里边除去。
不知道这样对不对啊?
回复

使用道具 举报

🔗
GreenIceTea 2017-1-8 01:35:58 | 只看该作者
全局:
bcc 发表于 2016-10-5 01:44
Greedy O(n)方法:电影那个题可以先从最短的时间列表看起,例如,电影C: 14, 15 随便选一个,电影c时间确定 ...

该解法并不是O(n)吧, 因为你本质上还是backtracking啊. 你提到的"把那个时间点从所有list除去", 其实直接把这个时间点放到一个Set里就好啦.
回复

使用道具 举报

🔗
GreenIceTea 2017-1-8 01:39:13 | 只看该作者
全局:
个人的简单backtracking解法:

  1. public class Moive {
  2.     /*
  3.         给一串movie,假定每个movie都是一个小时,并且都在整点播放;给你一个List的movies,让你安排播放时间,如果没有答案throw一个exception。
  4.         比如
  5.         电影A: 14, 15, 16, 17
  6.         电影B: 14, 15, 16
  7.         电影C: 14, 15
  8.         电影D: 14, 15, 17
  9.         返回一个解就行,比如 A 14, B 16, C 15, D 17。 如果你要 A 14, B 15, 后面 C就没法看了.
  10.      */
  11.     class MoviePlay{
  12.         String name;
  13.         int time;

  14.         public MoviePlay(String name, int time){
  15.             this.name = name;
  16.             this.time = time;
  17.         }

  18.         public String toString(){
  19.             return name + ":" + time;
  20.         }
  21.     }
  22.     public List<MoviePlay> arrange(Map<String, List<Integer>> movies) throws Exception{
  23.         List<MoviePlay> rlt = new ArrayList<>();
  24.         if(helper(rlt, new HashSet<>(), movies, new ArrayList<>(movies.keySet()), 0)) return rlt;
  25.         throw new Exception("No valid arrangement");
  26.     }

  27.     public boolean helper(List<MoviePlay> rlt, Set<Integer> timeTaken, Map<String, List<Integer>> times, List<String> movieList, int index){
  28.             if(index == movieList.size()) return true;
  29.             String movie = movieList.get(index);
  30.             List<Integer> playtime = times.get(movie);
  31.             for(Integer time: playtime){
  32.                 if(!timeTaken.contains(time)){
  33.                     timeTaken.add(time);
  34.                     rlt.add(new MoviePlay(movie, time));
  35.                     if(helper(rlt, timeTaken, times, movieList, index + 1)) return true;
  36.                     rlt.remove(rlt.size()-1);
  37.                     timeTaken.remove(time);
  38.                 }
  39.             }
  40.             return false;
  41.     }

  42.     public static void main(String[] args){
  43.         Map<String, List<Integer>> movies = new HashMap<>();
  44.         movies.put("A", new ArrayList());
  45.         movies.put("B", new ArrayList());
  46.         movies.put("C", new ArrayList());
  47.         movies.put("D", new ArrayList());
  48.         movies.get("A").addAll(Arrays.asList(14, 15, 16, 17));
  49.         movies.get("B").addAll(Arrays.asList(14, 15));
  50.         movies.get("C").addAll(Arrays.asList(14, 15));
  51.         movies.get("D").addAll(Arrays.asList(14, 15, 16, 17));
  52.         Moive m = new Moive();
  53.         try{
  54.             List<MoviePlay> rlt = m.arrange(movies);
  55.             System.out.println(rlt);
  56.         }catch (Exception e){
  57.             e.printStackTrace();
  58.         }
  59.     }
  60. }
复制代码

评分

参与人数 2大米 +4 收起 理由
kkllasdfgh + 1 很有用的信息!
hzhu07 + 3 很有用的信息!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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