中级农民
- 积分
- 114
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2020-10-10
- 最后登录
- 1970-1-1
|
本帖最后由 techDiscussion 于 2020-10-14 02:49 编辑
23-30行谁能证明下这样是对的呢?
这是答案。
- static int[] meetingPlanner(int[][] slotsA, int[][] slotsB, int dur) {
- // howlong i & j overlap?
- // if > dur, you got. ans
- // if < dur, move i if i[1] <= j[1], other move j
-
- /*
- input: slotsA = [[10, 50], [60, 120], [140, 210]]
- slotsB = [[0, 15], [60, 70]]
- dur = 8
-
- m=3, n=2
- i=1, j=1
- */
-
- int m = slotsA.length, n = slotsB.length;
- int i = 0, j = 0;
- while (i < m && j < n) {
- int overlap = overlap(slotsA[i], slotsB[j]);
- if (overlap >= dur) {
- int start = Math.max(slotsA[i][0], slotsB[j][0]);
- return new int[] {start, start + dur};
- } else {
- int cmp = slotsA[i][1] - slotsB[j][1];
- if (cmp < 0) {
- i++;
- } else if (cmp > 0) {
- j++;
- } else {
- i++;
- j++;
- }
- }
- }
- return new int[]{};
- }
-
- private static int overlap(int[] A, int[] B) {
- int x = Math.max(A[0], B[0]);
- int y = Math.min(A[1], B[1]);
-
- return y - x;
- }
复制代码
[/i][/i][/i][/i]
[i]
[/i]
[i]
[i][i]
[/i][/i]
|
|