在Javascript中实现检查重叠间隔的算法

在Javascript中实现检查重叠间隔的算法,javascript,algorithm,Javascript,Algorithm,试图用Javascript实现marcog的答案重叠间隔算法,但我无法让它工作 我想检查JSON数据结构中的值,找出表示行的x1-x2坐标的开始-停止值。我在一个接一个地添加新行,我想知道添加新行时会导致行重叠 我得到的错误是,当明显存在重叠时,它总是不打印重叠 这是我目前掌握的代码: var data = [], json = [ { "start" : 100, "stop" : 800 }, { "start" : 900, "stop" :

试图用Javascript实现marcog的答案重叠间隔算法,但我无法让它工作

我想检查JSON数据结构中的值,找出表示行的x1-x2坐标的开始-停止值。我在一个接一个地添加新行,我想知道添加新行时会导致行重叠

我得到的错误是,当明显存在重叠时,它总是不打印重叠

这是我目前掌握的代码:

var
data = [],
json = [
  { 
    "start" : 100,
    "stop" : 800
  },
  { 
    "start" : 900,
    "stop" : 1200
  },
  { 
    "start" : 200,
    "stop" : 600
    }
],
    sortInterval, checkOverlappingInterval;

sortInterval = function (value) {
  //Sorts a list with lower numbers first and end point come before 
  //starting points on ties
  value.sort(function (a,b){
    var aSplit = a.split("_"),
        bSplit = b.split("_");
    if (aSplit[0] * 1 > bSplit[0] * 1){
      return 1;
    }
    if (aSplit[0] * 1 < bSplit[0] * 1) {
      return -1;
    } else {
      if (aSplit[1] > bSplit[1]) {
        return 1;
      } else {
        return -1;
      }
    }
  });
};

checkOverlappingInterval = function(value){
  //Return true if there are overlapps
  var inInterval = false;
  value.forEach(function(v) {
    if (v.charAt(v.length-1) === "S"){
      if(inInterval){
        return true;
      }
      else {
        inInterval = true;
      }
    }
    else {
      inInterval = false;
    }

  });
  //return true;

  return false;
};

json.forEach(function (value) {
  //Push the new values to interval array and sort the array
  data.push(value.start + "_S");
  data.push(value.stop + "_E");
  sortInterval(data);
  //Check to see if the new line caused an overlapping line
  //If it did increase y and clear out data
  if (checkOverlappingInterval(data)){
    console.log("overlaps");
  } 
  //If it did not print line
  else {
    console.log("no overlaps");
  }
}); 

我认为这应该是可行的:

1按起始值对json数组进行排序

2我确信开始总是比之前的所有开始都要大,所以我唯一要检查的是,之前的停止是否比我正在检查的当前开始大。我用for来实现这一点,并在不同的时间内保持最大停止。因此,如果当前起始值大于我的最大值,它将重叠

json = [
  { 
    "start" : 100,
    "stop" : 800
  },
  { 
    "start" : 900,
    "stop" : 1200
  },
  { 
    "start" : 200,
    "stop" : 600
    },
    {"start":700, "stop":800}
];

function checkOverlaps(arr){
    arr=arr.slice(0);
    arr.sort(function(a,b){return a.start-b.start});
    var max=0;
    for(var i=1;i<arr.length;i++){
        max=arr[i-1].stop > max ? arr[i-1].stop : max;
        if(arr[i].start < max){
            console.log(arr[i],"overlaps");
        }
    }
}
checkOverlaps(json);
两个错误:

您忘记了在奇偶校验时从Compassion函数返回0。看见 您正试图从forEach回调返回true。这将仅从当前回调返回,而不是从checkOverlappingInterval函数返回。请使用/,或一个普通的。
哪种算法?这些答案似乎提出了多个不同的答案,最高的一个来自马可