zoukankan      html  css  js  c++  java
  • js判断两个区间是否存在交集

    思路:两个区间,两者的最小值中的最大值 <= 两者最大值的最小值时 就存在交集

    let arr1 = [1,4];
    let arr2 = [2,5];
    let arr3 = [5,2];
    let arr4 = [4,5];
    let arr5 = [9,5];
    let arr6 = [1,4];
    let arr7 = [5,6];
    let arr8 = [5,5];
    // 判断两个区间是否相交
    function isIntersect(arr1,arr2){
        let start = [Math.min(...arr1),Math.min(...arr2)];//区间的两个最小值
        let end = [Math.max(...arr1),Math.max(...arr2)];//区间的两个最大值
        return Math.max(...start) <= Math.min(...end);//最大值里的最小值 是否 小于等于 最大值的最小值
    }
    // 验证
    console.log(isIntersect(arr1,arr2));//true
    console.log(isIntersect(arr1,arr3));//true
    console.log(isIntersect(arr1,arr4));//true
    console.log(isIntersect(arr1,arr5));//false
    console.log(isIntersect(arr1,arr6));//true
    console.log(isIntersect(arr1,arr7));//false
    console.log(isIntersect(arr1,arr8));//false
    // 补充
    console.log(Math.max(1,2,3,3,3));//3
    console.log(Math.min(1,1,2,3,3,3));//1

     。

    另一些有意思的小算法

            // 用区间集合筛选出互斥的部分
            let allArr = [0,1,2,3,4,5,6,7,8,9];
            let a = [[1,3],[6,9]];
            a.forEach(item => {
                allArr = allArr.filter(aitem => aitem >= Math.max(...item) || aitem <= Math.min(...item));
            });
            console.log(allArr);
            // 判断两个去交是否有交集
            function isIntersect(arr1,arr2){
                let start = [Math.min(...arr1),Math.min(...arr2)];//区间的两个最小值
                let end = [Math.max(...arr1),Math.max(...arr2)];//区间的两个最大值
                return Math.max(...start) <= Math.min(...end);//最大值里的最小值 是否 小于等于 最大值的最小值
            }
            // 向区间集合添加新的区间时,判断区间集合中是否存在与新区间有交集的,如果存在,去除区间集合中有交集的区间,再加入新区间
            let arr = [[2,5],[4,5],[6,8]];
            let arr2 = [3,5];
            for(let i = arr.length -1; i >= 0;i--){
                if(isIntersect(arr[i],arr2)){
                    arr.splice(i,1);
                }
            }
            arr.push(arr2)
            console.log(arr);

     跳题逻辑核心思路:

    由这样的一个二维数组[[1,3],[4,6]]得到[0,1,3,4,6,7]的一个数组;
    推导过程,前推,后退,形成闭环。

  • 相关阅读:
    Repeater OnItemCommand 失效
    继承类时的 this 和 base
    想当然造成的的错误
    排序算法二叉树
    href 一个正则表达式的解析 ? 号解析
    给父窗口添加新的代码
    ValidationSummary 控件
    交叉表 学习
    定向思维 C# datediff
    cookie 问题
  • 原文地址:https://www.cnblogs.com/fqh123/p/14342612.html
Copyright © 2011-2022 走看看