問題:對輸入的區間如[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 可被視為重疊區間。思路 先進行...