區間合併總結

2022-05-02 19:06:07 字數 1280 閱讀 7928

區間合併總體來說還是比較簡單的,通過模擬基本都能做出來,不過要注意下標越界的情況。

例題:以陣列 intervals 表示若干個區間的集合,其中單個區間為 intervals[i] = [starti, endi] 。請你合併所有重疊的區間,並返回乙個不重疊的區間陣列,該陣列需恰好覆蓋輸入中的所有區間。

思路:將區間按左端點從小到大排成序列,然後通過對相鄰區間的"右左"端點判斷是否有交集,然後通過模擬完成區間合併。

class solution );

flag=1;

}ans.push_back(interval);

}else if(interval[1]給定乙個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。

注意:可以認為區間的終點總是大於它的起點。

區間 [1,2] 和 [2,3] 的邊界相互「接觸」,但沒有相互重疊。

思路:詳見**

class solution

ans++;

}else

}return ans;

}};

4.區間列表的交集(

給定兩個由一些 閉區間 組成的列表,firstlist 和 secondlist ,其中 firstlist[i] = [starti, endi] 而 secondlist[j] = [startj, endj] 。每個區間列表都是成對 不相交 的,並且 已經排序 。

返回這 兩個區間列表的交集 。

形式上,閉區間 [a, b](其中 a <= b)表示實數 x 的集合,而 a <= x <= b 。

兩個閉區間的 交集 是一組實數,要麼為空集,要麼為閉區間。例如,[1, 3] 和 [2, 4] 的交集為 [2, 3] 。

思路:雙指標,分別指向兩個列表,兩個區間不相交時,誰的區間小,移動誰的指標,相交時,則放入列表。注意指標越界。

class solution 

if(l >= firstlist.size() || r >= secondlist.size()) break;//防越界

int lmin = firstlist[l][0],lmax = firstlist[l][1];

int rmin = secondlist[r][0],rmax = secondlist[r][1];

// coutelse if(r < secondlist.size() && secondlist[r][1] <= firstlist[l][1])r++;

}return ans;

}};

區間 區間合併

用x,y表示乙個整數範圍區間,現在輸入一組這樣的範圍區間 用空格隔開 請輸出這些區間的合併。輸入描述 一行整數,多個區間用空格隔開。區間的逗號是英文本元。輸出描述 合併後的區間,用過空格隔開,行末無空格示例1 1,3 2,51,5示例2 1,3 2,5 8,10 11,151,5 8,10 11,1...

mysql合併到區間 合併區間

lc 合併區間 給出乙個區間的集合,請合併所有重疊的區間。示例 1 輸入 intervals 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 示例 2 輸入 intervals 1,4 4,5 輸出 1,5 解釋 ...

區間DP 總結 石子合併

這位博主寫的很詳細 例題 石子歸併。描述 有n堆石子排成一排,每堆石子有一定的數量。現要將n堆石子並成為一堆。合併的過程只能每次將相鄰的兩堆石子堆成一堆,並將新的一堆石子數記為該次合併的得分。給組測試資料 輸入 4 表示有4堆石子 4 4 5 9 表示每堆石子的個數 輸出 54 表示最大的得分 分析...