(演算法)判斷兩個區間是否重疊

來源:互聯網
上載者:User

標籤:

題目:

判斷兩個區間是否重疊

思路:

假設區間表示為[start,end],先存在兩個區間A,B.

兩個區間的關係有兩種:重疊與不重疊

重疊的情況有4種,兩種相交,兩種包含(很容易想到,此處不示意)

不重疊有兩種情況:A在B前面,A在B後面

因此很容易得到判斷區間重疊的方法:

1、正向判斷,列出四種重疊的情況,滿足其一,則重疊;

2、逆向判斷,列出兩種不重疊的情況,如果滿足其一,則重疊;

顯然第二種方法更簡單。

最佳化正向判斷:

考慮一下正向判斷的四種情況,其實只要滿足max(A.start,B.start)<=min(A.end,B,end),即可判斷A,B重疊。(由於畫圖比較麻煩,這裡就不示意,可以在紙上試試)

代碼:
#include <iostream>using namespace std;typedef struct{    int start;    int end;}Interval;bool isOverlap_1(Interval interval1,Interval interval2){    if(interval1.end<interval2.start || interval1.start>interval2.end)        return false;    return true;}bool isOverlap_2(Interval interval1,Interval interval2){    if(max(interval1.start,interval2.start)<=min(interval1.end,interval2.end))        return true;    return false;}int main(){    Interval interval1,interval2;    while(1){        if(cin>>interval1.start && cin>>interval1.end && cin>>interval2.start && cin>>interval2.end){            if(isOverlap_2(interval1,interval2))                cout<<"Overlap"<<endl;            else                cout<<"Non-overlap"<<endl;        }    }    return 0;}

  

 

(演算法)判斷兩個區間是否重疊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.