zoukankan      html  css  js  c++  java
  • 快速判断&求出区间相交的长度

    有两个区间A[a1,b1], B[a2,b2],判断这两个区间有没有交集。我们可以分为两种思维来判断:

    /**
      *思路就是如果两个区间不相交,那么最大的开始端一定大于最小的结束端
      **/
    
    if(max(a1, a2) < min(b1, b2)){
        return "有交集"
    }else{
        return "无交集"
    }
    给你两个区间[a, b]和[c, d],如果让你求出这两个区间的相交长度,你会怎么做呢?
    不出意外的话,大多数同学就会进行分类讨论,看看那个区间在前,那个区间在后,分两种情况,然后对区间相交还是覆盖又分了两种情况。
    int main()
    {
        while(~scanf("%d%d%d%d", &a, &b, &c, &d)) {
            int len;
            if(b < c || a > d) len = 0;
            else {
                //先分区间先后,再分区间相交还是覆盖
                //这就是普通做法
                if(c >= a) {
                    if(d <= b) len = d-c+1;
                    else len = b-c+1;
                }else {
                    if(b <= d) len = b-a+1;
                    else len = d-a+1;
                }
            }
            printf("%d
    ", len);
        }
    }

    【快速求法】

    int main()
    {
        while(~scanf("%d%d%d%d", &a, &b, &c, &d)) {
            int len;
            int s = min(b, d) - max(a, c) + 1;
            len = max(0, s);
            printf("%d
    ", len);
        }
    }
  • 相关阅读:
    leetcode 78. 子集 JAVA
    leetcode 91. 解码方法 JAVA
    leetcode 75. 颜色分类 JAVA
    leetcode 74 搜索二维矩阵 java
    leetcode 84. 柱状图中最大的矩形 JAVA
    last occurance
    first occurance
    classical binary search
    LC.234.Palindrome Linked List
    LC.142. Linked List Cycle II
  • 原文地址:https://www.cnblogs.com/Roni-i/p/9565070.html
Copyright © 2011-2022 走看看