Javascript 在一系列数字中寻找差距
我正在寻找一种解决方案(最好是JavaScript),它可以在一组选定的子范围中找到与其父范围相比的差距 示例1:如果我选择父范围{1,10},子范围{1,2}和{2,10},则间隙为0,这意味着父范围中的范围已完全由其子范围填充Javascript 在一系列数字中寻找差距,javascript,algorithm,math,Javascript,Algorithm,Math,我正在寻找一种解决方案(最好是JavaScript),它可以在一组选定的子范围中找到与其父范围相比的差距 示例1:如果我选择父范围{1,10},子范围{1,2}和{2,10},则间隙为0,这意味着父范围中的范围已完全由其子范围填充 例2:如果我选择一个{1,10}的父范围和{1-3}和{6,8}的子范围,我将有一个4的间隙。通常间隙也是一个范围或一组范围。例如父项:{1-10},子项{1,2},{5,8},间隙{3,4},{9,10}正因为如此,我建议你写一个东西,可以从一个范围减去另一个范围,
例2:如果我选择一个{1,10}的父范围和{1-3}和{6,8}的子范围,我将有一个4的间隙。通常间隙也是一个范围或一组范围。例如父项:{1-10},子项{1,2},{5,8},间隙{3,4},{9,10}正因为如此,我建议你写一个东西,可以从一个范围减去另一个范围,然后将它应用于每个子项的父项。有3种情况需要考虑:它是在开始,在中间(产生两个范围)还是在最后。然后,当你从一组范围中减去时,你必须考虑所有可能重叠的情况。 因此,在javascript中,使用start和end属性创建一个range对象,然后携带这些数组。make函数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.
}
rangeSub(父、子){
var结果;
//范围减法集合的代码
if(父项长度)
用于(父级中的范围){
温度=范围子对象(范围,子对象);
如果(温度长度)结果为混凝土(温度);
其他结果。推送(温度);
}
返回结果;
}
//单量程减法代码
if(parent.startchild.end){
...
}
等
}
仍然有几个边缘案例需要解决,但这是我将遵循的一般形式
假设您只使用整数,则得到的总数是缺少的数字的数量。任意数量的子范围?还有我们谈论的范围有多大?无限多的子范围。我举的例子是一个1到10的范围,但它可以是任何东西;但是在说“你必须考虑所有可能重叠的情况”之后,你就不知道如何考虑它们。可能会比其他答案中的简单方法更复杂。是的,我同意。。。这就是为什么我没有写完所有的案例。但在一般情况下,范围可能很大(如父范围{1,10^20}或类似的情况),不能遗漏数字列表,而需要在范围内工作。