查看: 1033| 回复: 3
跳转到指定楼层
上一主题 下一主题
收起左侧

[学Java/C#] 一个不是Leetcode的题目,time intervals

全局:

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

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

x
slotsA = [[10, 50], [60, 120], [140, 210]]
slotsB = [[0, 15], [60, 70]]

比如,需要找到最早重叠超过 8 的 time intervals 。 这里答案是[60, 68]

我打算是用两个指针,

比如一开始 i = 0, j = 0  

但问题是,一开始的两个time intervals 就重叠了,只不过重叠长度比8小,所以我要移动指针,这种情况,怎么判断移动哪个指针呢?  

谢谢大家。

顺便求多点米~~~







补充内容 (2020-10-14 02:49):
----

题目细节看下面第一个回复的图片

上一篇:CoderPad 和 CodeSignal 区别 拿个更严格点
下一篇:菜鸡求问 LeetCode328 LinkedList 细节问题
 楼主| techDiscussion 2020-10-14 02:40:52 | 只看该作者
全局:
本帖最后由 techDiscussion 于 2020-10-14 02:49 编辑

23-30行谁能证明下这样是对的呢?  

这是答案。


  1.   static int[] meetingPlanner(int[][] slotsA, int[][] slotsB, int dur) {
  2.     // howlong i & j overlap?
  3.     // if > dur, you got. ans
  4.     // if < dur, move i if i[1] <= j[1], other move j
  5.    
  6.     /*
  7.     input:  slotsA = [[10, 50], [60, 120], [140, 210]]
  8.         slotsB = [[0, 15], [60, 70]]
  9.         dur = 8
  10.         
  11.         m=3, n=2
  12.         i=1, j=1
  13.     */
  14.    
  15.     int m = slotsA.length, n = slotsB.length;
  16.     int i = 0, j = 0;
  17.     while (i < m && j < n) {
  18.       int overlap = overlap(slotsA[i], slotsB[j]);
  19.       if (overlap >= dur) {
  20.         int start = Math.max(slotsA[i][0], slotsB[j][0]);
  21.         return new int[] {start, start + dur};
  22.       } else {
  23.         int cmp = slotsA[i][1] - slotsB[j][1];
  24.         if (cmp < 0) {
  25.           i++;
  26.         } else if (cmp > 0) {
  27.           j++;
  28.         } else {
  29.           i++;
  30.           j++;
  31.         }
  32.       }
  33.     }
  34.     return new int[]{};
  35.   }
  36.   
  37.   private static int overlap(int[] A, int[] B) {
  38.     int x = Math.max(A[0], B[0]);
  39.     int y = Math.min(A[1], B[1]);
  40.    
  41.     return y - x;
  42.   }
复制代码

[/i][/i][/i][/i]
[i]

[/i]
[i]

[i][i]

[/i][/i]
回复

使用道具 举报

全局:
移动结束时间早的指针
回复

使用道具 举报

🔗
tldxk 2020-10-14 05:08:25 | 只看该作者
全局:
移动结束早的指针。lz例子里,[10, 50]和[0, 15]重叠不足8,移动B指针,因为B的下一个还有可能和当前的A重叠。反之移动A到下一个,那不可能和当前的B重叠。
回复

使用道具 举报

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

本版积分规则

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