美文网首页
区间(时段)重叠判断

区间(时段)重叠判断

作者: TingsLee | 来源:发表于2019-11-20 17:25 被阅读0次

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


    时间段是否重叠

    代码如下:

    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项,是否是某一个区间的开始和结束值。如果不是则区间有重叠,否则无重叠。

    相关文章

      网友评论

          本文标题:区间(时段)重叠判断

          本文链接:https://www.haomeiwen.com/subject/ddboictx.html