Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在一系列数字中寻找差距_Javascript_Algorithm_Math - Fatal编程技术网

Javascript 在一系列数字中寻找差距

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}正因为如此,我建议你写一个东西,可以从一个范围减去另一个范围,

我正在寻找一种解决方案(最好是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}正因为如此,我建议你写一个东西,可以从一个范围减去另一个范围,然后将它应用于每个子项的父项。有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){
...
}
等
}
仍然有几个边缘案例需要解决,但这是我将遵循的一般形式

  • 按初始编号对子范围进行排序
  • 从第一个子范围的初始编号中减去父范围的初始编号。这是你跑步总量的开始
  • 从以下范围的初始数字中减去范围的第二个数字
  • 如果结果是3。如果为正,则添加到运行总数中
  • 最后,从父范围的第二个数字中减去最后一个范围的第二个数字,添加到运行总数

  • 假设您只使用整数,则得到的总数是缺少的数字的数量。

    任意数量的子范围?还有我们谈论的范围有多大?无限多的子范围。我举的例子是一个1到10的范围,但它可以是任何东西;但是在说“你必须考虑所有可能重叠的情况”之后,你就不知道如何考虑它们。可能会比其他答案中的简单方法更复杂。是的,我同意。。。这就是为什么我没有写完所有的案例。但在一般情况下,范围可能很大(如父范围{1,10^20}或类似的情况),不能遗漏数字列表,而需要在范围内工作。