有这么一个问题:
8:00-9:30
9:00-11:00
9:00-12:00
13:00-14:24
19:00-22:00
20:00-21:30
21:50-23:00
给出一天之内(0:00-24:00)几组时间段,求这些时间段总和。
注意:上面几组时间段中,可能会有包含关系或交叉关系
有这么一个问题:
8:00-9:30
9:00-11:00
9:00-12:00
13:00-14:24
19:00-22:00
20:00-21:30
21:50-23:00
给出一天之内(0:00-24:00)几组时间段,求这些时间段总和。
注意:上面几组时间段中,可能会有包含关系或交叉关系
function formatTime(str) {
str = ('000' + str).slice(-5);
return new Date('2017-12-17T03:' + str)
}
function timeMax(s, e) {
s = ('000' + s).slice(-5);
e = ('000' + e).slice(-5);
return new Date('2017-12-17T03:' + s) > new Date('2017-12-17T03:' + e) ? s : e
}
function merge(intervals) {
intervals.sort(function(a, b) {
if (formatTime(a[0]) !== formatTime(b[0]))
return formatTime(a[0]) - formatTime(b[0]);
return formatTime(a[1]) - formatTime(b[1]);
});
var len = intervals.length,
ans = [],
start, end;
for (var i = 0; i < len; i++) {
var s = intervals[i][0],
e = intervals[i][1];
if (start === undefined)
start = s, end = e;
else if (formatTime(s) <= formatTime(end)) {
end = timeMax(e, end);
} else {
var part = [start, end];
ans.push(part);
start = s;
end = e;
}
}
if (start !== undefined) {
var part = [start, end];
ans.push(part);
}
return ans;
};
var arr = [
['8:00', '9:30'],
['9:00', '11:00'],
['13:00', '14:24'],
['19:00', '22:00'],
['20:00', '21:30'],
['19:00', '22:00'],
['21:50', '23:00']
]
console.log(JSON.stringify(merge(arr)))
13 回答13k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
6 回答1.1k 阅读
可以先将重合时间段合并(将 xx:xx 的形式化为分钟以简便),其实就是 leetcode 上的这道题 Merge Intervals,可以参考我的题解 https://github.com/hanzichi/l...,然后就简单了,循环一遍相加即可