給出乙個區間的集合,請合併所有重疊的區間。

2021-10-05 03:43:12 字數 1387 閱讀 1000

給出乙個區間的集合,請合併所有重疊的區間。

示例 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] 可被視為重疊區間。

class solution {

public:

bool iscanmerge(vector&merge1, vector&merge2)

if (merge1.size() != 2 || merge2.size() != 2)

return false;

if (merge1[1] < merge2[0])

return false;

return true;

static bool myfunc(vector&vi, vector&vj)

return vi[0] < vj[0];

vector> merge(vector>& intervals) {

if (intervals.size() <= 1)

return intervals;

std::sort(intervals.begin(), intervals.end(), myfunc);

vector>::iterator itrpre = intervals.begin();

vector>::iterator itrend = intervals.begin();

itrend++;

vector> vect;

vectortemp = *itrpre;

while (itrend != intervals.end())

if (iscanmerge(temp, *itrend))

temp[0] = (temp[0] < (*itrend)[0]) ? temp[0] : (*itrend)[0];

temp[1] = (temp[1] > (*itrend)[1]) ? temp[1] : (*itrend)[1];

itrend++;

else

vect.push_back(temp);

temp.clear();                

temp.push_back((*itrend)[0]);

temp.push_back((*itrend)[1]);

itrend++;

if (!temp.empty())

vect.push_back(temp);

return vect;

輸出乙個集合的所有子集

輸出字串的所有子集 如 對 abc 輸出 c b bc a ac ab abc 第一種做法 2 n 遍歷每個字元,每個字元只能取或者不取。取就把該字元加入結果中,遍歷完畢後,輸出結果字串。如下 main.cpp 輸出乙個集合的所有子集 created by zjl on 16 8 10.includ...

列舉乙個集合的所有子集

數字範圍是0 9,即集合元素在10個及以下 ifndef subset h define subset h class subset endif subset h include include subset.h using namespace std int main array1.find su...

輸出乙個集合的所有子集合

面試遇上了這個問題,思量了會,想到用遞迴的方式解決這個問題。回來網上搜尋了下,發現通過二進位制的思想來解決這個問題更容易,下面我把兩種解決方式的思想及原碼分享出來。我們都知道,乙個含n個元素的集合擁有2 n個子集合,並且不難發現,其中每個子集合都是從0到2 n 1 每個數的二進位制格式中0 放棄,1...