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

facebook 二面题目求解题思路

🔗
pinkfloyda 2016-3-23 17:30:40 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

🔗
pinkfloyda 2016-3-24 10:31:28 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

🔗
pinkfloyda 2016-3-24 10:39:13 | 只看该作者
全局:
guschen802 发表于 2016-3-12 09:53
补充内容 (2016-3-12 10:25):
HashMap的空間還能進一步減少,使用TreeMap, 每次有重疊的interval時,取出 ...

但是你的代码发现有side effect,原来intervals里面的值会被改动
回复

使用道具 举报

🔗
zjuzqh 2016-3-24 11:35:47 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

🔗
guschen802 2016-3-25 00:13:52 | 只看该作者
全局:
pinkfloyda 发表于 2016-3-24 10:39
但是你的代码发现有side effect,原来intervals里面的值会被改动

感謝驗證,改變值這個好解決,如果要求保持原本的不便的話就在放到newinterval裡面克隆一個新的就好了,就是會多浪費空間
回复

使用道具 举报

🔗
sealove999 2016-4-12 14:39:08 | 只看该作者
全局:
写一个java,排序的,nlgn
  1. public class Solution {
  2.   class timepoint {
  3.     int t;
  4.     int end;

  5.     public timepoint(int tt, int se) {
  6.       t = tt;
  7.       end = se;
  8.     }
  9.   }

  10.   public List<Integer> find(int[][] intervals) {
  11.     List<timepoint> timepoints = new ArrayList<>();
  12.     for (int[] interval : intervals) {
  13.       timepoints.add(new timepoint(interval[0], 0));
  14.       timepoints.add(new timepoint(interval[1], 1));
  15.     }
  16.     timepoints.sort((x, y) -> {
  17.       if (x.t != y.t)
  18.         return x.t - y.t;
  19.       return x.end - y.end;
  20.     });
  21.     // find
  22.     List<timepoint> ret = new ArrayList<>();
  23.     int max = 0;
  24.     int count = 0;
  25.     for (timepoint tp : timepoints) {
  26.       if (tp.end == 0) {
  27.         count++;
  28.         if (count > max) {
  29.           max = count;
  30.           ret.clear();
  31.           ret.add(tp);
  32.         } else if (count == max) {
  33.           ret.add(tp);
  34.         }
  35.       } else if (tp.end == 1) {
  36.         if (count == max) {
  37.           ret.add(tp);
  38.         }
  39.         count--;
  40.       }
  41.     }
  42.     // build ret
  43.     List<Integer> ret2 = new ArrayList<>();
  44.     for (int i = 0; i < ret.size(); i += 2) {
  45.       for (int j = ret.get(i).t; j < ret.get(i + 1).t; j++) {
  46.         ret2.add(j);
  47.       }
  48.     }
  49.     return ret2;
  50.   }

  51.   public static void main(String[] args) {
  52.     Solution s = new Solution();
  53.     System.out.println(s.find(new int[][] {{1, 3}, {2, 7}, {4, 8}, {5, 9}}));
  54.     System.out.println(s.find(new int[][] {{1, 10}}));
  55.     System.out.println(
  56.         s.find(new int[][] {{1, 2}, {2, 3}, {3, 4}, {4, 5}, {5, 6}, {6, 7}, {7, 8}, {8, 9}}));
  57.     System.out.println(s.find(new int[][] {{1, 2}}));
  58.     System.out.println(s.find(new int[][] {{5, 9}, {5, 10}, {7, 13}}));
  59.     System.out.println(s.find(new int[][] {}));
  60.     System.out.println(s.find(new int[][] {{1, 4}, {1, 4}, {1, 4}}));
  61.   }
  62. }
复制代码
回复

使用道具 举报

🔗
何打发123 2016-7-27 07:23:16 | 只看该作者
全局:
感谢楼主分享~~ 自己写了一个 大概思路是记录到了每一点目前有的interval的数量 各位求指正~~
  1. import java.util.*;

  2. class Interval{
  3.         int start, end;
  4.         public Interval(int s, int e){
  5.                 start = s;
  6.                 end = e;
  7.         }
  8. }

  9. class Point{
  10.         int time;
  11.         boolean flag;
  12.         Interval interval;
  13.         public Point(int t, boolean f, Interval i){
  14.                 time = t;
  15.                 flag = f;
  16.                 interval = i;
  17.         }
  18. }

  19. class myComparator implements Comparator<Point>{
  20.         public int compare(Point i1, Point i2){
  21.                 if(i1.time == i2.time){
  22.                         //finish first
  23.                         if(!i1.flag && i2.flag){
  24.                                 return -1;
  25.                         }else return 1;
  26.                 }
  27.                 return i1.time - i2.time;
  28.         }
  29. }

  30. class Solution {
  31.         public ArrayList<Integer> scheduel(ArrayList<Interval> arr){
  32.                 ArrayList<Integer> res = new ArrayList<Integer>();
  33.                 if(arr == null || arr.size() == 0) return res;
  34.                
  35.                 ArrayList<Point> pointList = new ArrayList<Point>();
  36.                
  37.                 for(int i = 0; i < arr.size(); i++){
  38.                         Interval cur = arr.get(i);
  39.                         Point startPoint = new Point(cur.start, true, cur);
  40.                         Point endPoint = new Point(cur.end, false, cur);
  41.                         pointList.add(startPoint);
  42.                         pointList.add(endPoint);
  43.                 }
  44.                
  45.                 //sort as start time
  46.                 Collections.sort(pointList, new myComparator());
  47.                
  48.                 ArrayList<Interval> maxIntervalList = new ArrayList<Interval>();
  49.                 int max = 0, num = 0;
  50.                 for(Point p : pointList){
  51.                         if(p.flag == true){
  52.                                 num++;
  53.                                 if(num >= max){
  54.                                         if(num > max){
  55.                                                 maxIntervalList.clear();
  56.                                         }
  57.                                        
  58.                                         max = num;
  59.                                         Interval x = new Interval(p.time, p.time);
  60.                                         maxIntervalList.add(x);
  61.                                 }
  62.                         }else{
  63.                                 if(num == max){
  64.                                         Interval lastInterval = maxIntervalList.get
  65.                                         (maxIntervalList.size() - 1);
  66.                                         lastInterval.end = p.time;
  67.                                 }
  68.                                 num--;
  69.                         }
  70.                 }
  71.                 for(Interval temp : maxIntervalList){
  72.                         for(int moment = temp.start; moment < temp.end; moment++){
  73.                                 res.add(moment);
  74.                         }
  75.                 }
  76.                 return res;
  77.         }
  78.        
  79.         public static void main(String[] args) {
  80.                 Solution r = new Solution();
  81.                 Interval a = new Interval(2,7);
  82.                 Interval b = new Interval(1,3);
  83.                 Interval c = new Interval(4,8);
  84.                 Interval d = new Interval(5,9);
  85.                 Interval f = new Interval(7,9);
  86.                
  87.                 ArrayList<Interval> res = new ArrayList<Interval>();
  88.                 res.addAll(Arrays.asList(a, b, c, d, f));
  89.                 ArrayList<Integer> m = r.scheduel(res);       
  90.                
  91.                 for(Integer k : m){
  92.                         System.out.println(k);
  93.                 }
  94.         }
  95.                
  96. }
复制代码
回复

使用道具 举报

全局:
面另外一家公司,竟然也被面这道题。。。
回复

使用道具 举报

🔗
tigercode 2016-9-14 13:06:43 | 只看该作者
全局:
line scan, 唯一要注意的是sort的时候 end排在start的前面
回复

使用道具 举报

🔗
www_boy 2017-2-13 01:27:11 | 只看该作者
全局:
Java 版本的,感觉跟skyline很像, 最后没返回结果直接打印出来了
  1. public static void FindMaxStamp(List<int[]> intervals){
  2.                 List<int[]> ret = new ArrayList<>();
  3.                 List<int[]> res = new ArrayList<>();
  4.                 for(int[] interval : intervals){
  5.                         System.out.println("input:" + interval[0] + "," + interval[1]);
  6.                         res.add(new int[]{interval[0], 1});
  7.                         res.add(new int[]{interval[1], -1});
  8.                 }
  9.                 Collections.sort(res, new Comparator<int[]>(){
  10.                         public int compare(int[] a, int[] b){
  11.                                 return a[0] - b[0];
  12.                         }
  13.                 });
  14.                 int max = 0, num = 0, start = 0;
  15.                 for(int[] pos : res){
  16.                         if(pos[1] == 1){//start point
  17.                                 num++;
  18.                                 start = pos[0];
  19.                         }else{// end point
  20.                                 if(num == max){
  21.                                         ret.add(new int[]{start, pos[0]});
  22.                                 }else if(num > max){
  23.                                         max = num;
  24.                                         ret = new ArrayList<>();
  25.                                         ret.add(new int[]{start, pos[0]});
  26.                                 }
  27.                                 num--;
  28.                         }
  29.                 }
  30.                
  31.                 for(int[] temp : ret){
  32.                         System.out.println(":["+temp[0] + "," + temp[1] + ")");
  33.                 }
  34.         }
复制代码
回复

使用道具 举报

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

本版积分规则

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