我正在寻找一种解决方案(最好是JavaScript),它会在一组选定的子范围中找到与其父范围相比的差距。
示例1:如果我选择{1,10}的父范围和{1,2}和{2,10}的子范围,我的间隙为0,表示父范围内的范围已经被孩子们完全填满。
示例2:如果我选择{1,10}的父范围和{1-3}和{6,8}的子范围,我将有4的差距。
答案 0 :(得分:3)
结果总数是缺失数字的数量,假设您只使用整数。
答案 1 :(得分:0)
通常,间隙也是范围或范围集。示例父母:{1-10},孩子{1,2},{5,8},差距{3,4},{9,10}因此我建议你写一个可以减去一个范围的东西从另一个孩子那里,然后将其应用于父母。有3种情况需要考虑:它是在开始时,在中间(产生两个范围)还是在结束时。然后,当您从一组范围中减去时,您必须考虑可能存在重叠的所有情况。
所以在javascript中创建一个带有start和end属性的范围对象,然后携带这些的数组。使一个函数rangeSub(parent,child)进行减法,其中parent可以是范围数组,child是单个范围。
rangeSub(parent, child) {
var result;
//code for set of range subtraction
if(parent.length)
for(range in parent) {
temp = rangeSub(range,child);
if(temp.length) result.concat(temp);
else result.push(temp);
}
return result;
}
//code for single range subtraction
if(parent.start < child.start) {
...
}
if(parent.end > child.end) {
...
}
etc.
}
仍有一些边缘情况需要解决,但这是我要遵循的一般形式。