區間合併演算法

2021-09-18 07:17:33 字數 894 閱讀 2662

問題:對輸入的區間如[1,2][2,6][3,5][7,9]進行合併,輸出[1,6][7,9]

思路1:如果資料較小,可開闢一大陣列,如上述資料,開闢乙個大小為100的布林型陣列對在區間內的賦值true。掃瞄輸出為true的數字。

思路2:定義left和right,

(1)開始left和right分別為第乙個區間的左右,

(2)從第二個區間開始遍歷,如果第二個區間左值大於第乙個區間右值則儲存第乙個,第二個的左右為新的left和right。

(3)否則比較第二個的右值和第乙個的右值,如果第二個的右值大於第乙個右值

則更新第二個的右值為新的right。

#include #include #include using namespace std;

typedef vector> **;

bool comp(pair& p1,pair& p2) //按第乙個元素大小公升序排列

** cover(**& q, int n)

}res.push_back(make_pair(left, right));//最後一次由於沒有了比較所以沒存入

return res;

}void main()

sort(q.begin(), q.end(), comp);//按第乙個元素大小公升序排列

cout << "區間顯示" << endl;

for (int i = 0; i < n; i++)

cout << endl;

res = cover(q, n);

cout << "合併後區間顯示" << endl;

for (int i = 0; i < res.size(); i++)

system("pause");

}

演算法(區間合併)

給定 n 個區間 li,ri 要求合併所有有交集的區間。注意如果在端點處相交,也算有交集。輸出合併完成後的區間個數。例如 1,3 和 2,6 可以合併為乙個區間 1,6 輸入格式 第一行包含整數n。接下來n行,每行包含兩個整數 l 和 r。輸出格式 共一行,包含乙個整數,表示合併區間完成後的區間個數...

區間合併演算法

兩個區間的關係無非就下面幾種 這裡說的左端點是指下面那個區間的左右端點,內外指的是下面區間相較於上面區間的位置關係 左端點 1.區間內 2.區間外 右端點 1.區間內 2.區間外 左1右1,左1右2,左2右1,左2右2 左2右1這種情況是不可能的,所以一共就3種可能的關係 1.2.3.針對3種不同的...

演算法之合併區間

給出乙個區間的集合,請合併所有重疊的區間。示例 1 輸入 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 示例 2 輸入 1,4 4,5 輸出 1,5 解釋 區間 1,4 和 4,5 可被視為重疊區間。思路 先進行...