區間合併總體來說還是比較簡單的,通過模擬基本都能做出來,不過要注意下標越界的情況。
例題:以陣列 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 表示最大的得分 分析...