-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
计算多个区间的交集 #32
Comments
var getIntersection = function getIntersection(...secs) {
let len = secs.length,
ans = null;
if (len === 0) return ans;
if (len === 1) return secs[0].sort((a, b) => a - b);
ans = secs[0]; // 以第一个区间作为参照
for (var i = 1, l = secs.length; i < l; i++) {
// 无交集 ans 最大值小于当前区间的最小值 / ans 的最小值大于当前区间的最大值
if (
Math.min(...secs[i]) > Math.max(...ans) ||
Math.min(...ans) > Math.max(...secs[i])
) {
return null;
}
ans = [
Math.max(Math.min(...ans), Math.min(...secs[i])),
Math.min(Math.max(...ans), Math.max(...secs[i]))
];
}
return ans;
}; |
var getIntersection = function(...args) {
if (!args || args.length == 1) return null;
let ret = null;
for (let i = 0; i < args.length; i ++) {
ret = intersection(ret, args[i]);
}
return ret;
};
var intersection = function (fArr, sArr) {
if (!fArr || !sArr) return fArr ? fArr : sArr ? sArr : [];
let minV1 = fArr[0] > fArr[1] ? fArr[1] : fArr[0];
let minV2 = sArr[0] > sArr[1] ? sArr[1] : sArr[0];
let maxV1 = fArr[0] < fArr[1] ? fArr[1] : fArr[0];
let maxV2 = sArr[0] < sArr[1] ? sArr[1] : sArr[0];
if (maxV1 < minV2 || maxV2 < minV1) return null;
// let retArr = [];
// if (minV1 > minV2) retArr.push(minV1); else retArr.push(minV2);
// if (maxV1 < maxV2) retArr.push(maxV1); else retArr.push(maxV2);
// return retArr;
return [minV1 > minV2 ? minV1 : minV2, maxV1 < maxV2 ? maxV1 : maxV2];
} |
@Mirai39 优秀,不过我觉得只有一个区间的话应该直接返回出来,而不是null。 |
是指这行吗?但是如果只给一个区间的话就不存在交集啊 |
我觉得它和它本身就是一个交集,就和你要求最大值一样,只有一个数值的话那么这个数值就是最大的,而不是得有另外一个参照值。 |
O(∩_∩)O哈哈~,我觉得这跟最大值有点不一样,因为既然是交集的话那么必然要有参照,可以联想下“两条线交叉”,如果只有一条线,很难想象可以跟交叉联系到一起 |
@Mirai39 嗯,是我对交集的理解不太对,它是需要两个或两个以上的区间对比才成立的哈哈😝😝 |
更改 return 条件 + if (len === 0 || len === 1) return ans;
- if () return secs[0].sort((a, b) => a - b); |
一起加油(//̀Д/́/) |
计算多个区间的交集
区间用长度为2的数字数组表示,如[2, 5]表示区间2到5(包括2和5);
区间不限定方向,如[5, 2]等同于[2, 5];
实现
getIntersection 函数
可接收多个区间,并返回所有区间的交集(用区间表示),如空集用null表示
示例:
The text was updated successfully, but these errors were encountered: