区间(时段)重叠判断

2019-11-20  本文已影响0人  TingsLee

业务中经常遇到判断区间是否重叠的问题:


时间段是否重叠

代码如下:

founction rangeRepeat(array) {
      //判断区间是否重复
      // array: [[start, end], [start, end], ...]
      // end > start
      const concatArr = Array.prototype.concat.apply([], array).sort();
      for (let i = 0; i < concatArr.length; i += 2) {
        const start = concatArr[i];
        const end = concatArr[i + 1];
        const isRangeStartAndEnd = array.some(item => {
          return item[0] === start && item[1] === end
        })

        if(isRangeStartAndEnd) {
          continue
        } else {
          // 有重复区间
          return  true;
        }
      }
      return false;
    }

思路:把区间想象成一个以为数轴。每个区间都是数轴的一部分。将区间的开始和结束值合并成一个数组,然后排序。判断有序数组的2n2n+1项,是否是某一个区间的开始和结束值。如果不是则区间有重叠,否则无重叠。

上一篇下一篇

猜你喜欢

热点阅读