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

Google 电面

🔗
 楼主| yangdaxian 2018-6-17 07:08:47 | 只看该作者
全局:
biomedicineman 发表于 2018-6-17 01:34
很赞同。就是lc56 meeting room变形。只不过判断两个interval是否应该merge时应该call 第一问的那个funct ...

根据之前的讨论,应该是没法nlogn内完成的,不过如果你有觉得可行的具体解法欢迎写出来讨论
回复

使用道具 举报

🔗
 楼主| yangdaxian 2018-6-17 07:10:23 | 只看该作者
全局:
根据目前大家的讨论,应该是没法nlogn内完成的,不过如果有觉得可行的具体解法欢迎写出来讨论
回复

使用道具 举报

🔗
StevenXie 2018-6-17 09:13:48 | 只看该作者
全局:
先sort矩形,然后merge矩形,最后求最大,最小Y
回复

使用道具 举报

🔗
FML 2018-6-17 09:27:56 | 只看该作者
全局:
先遍历一遍,把所有重叠的长方形按照四届简单合并成一个大长方形,再遍历这些大长方形,这次只用看纵坐标是否包含(0,1)了,不用排序的话复杂度应该是O(n)
回复

使用道具 举报

🔗
FML 2018-6-17 09:29:10 | 只看该作者
全局:
StevenXie 发表于 2018-6-17 09:13
先sort矩形,然后merge矩形,最后求最大,最小Y

哥们儿我跟你想的应该一样
回复

使用道具 举报

🔗
 楼主| yangdaxian 2018-6-17 22:53:30 | 只看该作者
全局:
FML 发表于 2018-6-17 09:27
先遍历一遍,把所有重叠的长方形按照四届简单合并成一个大长方形,再遍历这些大长方形,这次只用看纵坐标是 ...

前面给过反例了~
回复

使用道具 举报

🔗
 楼主| yangdaxian 2018-6-17 22:53:50 | 只看该作者
全局:
FML 发表于 2018-6-17 09:27
先遍历一遍,把所有重叠的长方形按照四届简单合并成一个大长方形,再遍历这些大长方形,这次只用看纵坐标是 ...

前面给过反例了~
回复

使用道具 举报

🔗
FML 2018-6-18 02:37:06 | 只看该作者
全局:
yangdaxian 发表于 2018-6-17 22:53
前面给过反例了~

之前写的时候没考虑小数,所以把判定范围扩大到了(0,2),输入格式是{左下角坐标,右上角坐标}
  1. public class Main {
  2.     public static void main(String[] args) {
  3.         int[][] test= new int[][]{{0,0,1,1},{2,2,4,4},{1,1,5,5}};
  4.         System.out.println(rectangleArea(test));
  5.     }
  6.     static class Interval{
  7.         int lo, hi;
  8.         List<Interval> vtc= new LinkedList<>();
  9.         public Interval(int lo, int hi){this.lo=lo; this.hi=hi;}
  10.     }
  11.     public static boolean rectangleArea(int[][] rectangles) {
  12.         Arrays.sort(rectangles, (a, b)-> a[0]==b[0]?a[1]-b[1]:a[0]-b[0]);
  13.         List<Interval> list= new LinkedList<>();
  14.         int s=0, e=0;
  15.         for (int[] r: rectangles){
  16.             if (!list.isEmpty() && r[0]<=e) e=Math.max(e, r[2]);
  17.             else{
  18.                 s=r[0];
  19.                 e=r[2];
  20.                 list.add(new Interval(s, e));
  21.             }
  22.             list.get(list.size()-1).vtc.add(new Interval(r[1], r[3]));
  23.         }
  24.         System.out.println(list.size());
  25.         for (Interval hor: list){
  26.             hor.vtc.sort((a,b)->(a.lo-b.lo));
  27.             s=Integer.MIN_VALUE;
  28.             e=0;
  29.             for (Interval vtc: hor.vtc){
  30.                 System.out.println(vtc.lo+" "+vtc.hi);
  31.                 if (s!=Integer.MIN_VALUE && vtc.lo<=e) e=Math.max(e, vtc.hi);
  32.                 else{
  33.                     s=vtc.lo;
  34.                     e=vtc.hi;
  35.                 }
  36.                 if (s>2) break;
  37.                 if (s<=0 && e>=2) return true;
  38.             }
  39.         }
  40.         return false;
  41.     }
  42. }
复制代码
回复

使用道具 举报

🔗
happyrabbit 2018-6-18 05:15:26 | 只看该作者
本楼:
全局:
谢谢分享!
回复

使用道具 举报

🔗
 楼主| yangdaxian 2018-6-18 08:29:01 | 只看该作者
全局:
FML 发表于 2018-6-18 02:37
之前写的时候没考虑小数,所以把判定范围扩大到了(0,2),输入格式是{左下角坐标,右上角坐标}
[mw_sh ...

前面提到的反例是{0,0,2,2},{2,2,4,4},{-1,4,0,5}这样的。(假设路是0~5),这个情况应该是没有挡住。
回复

使用道具 举报

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

本版积分规则

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