在標準輸出上列印出輸入資料檔案中最大重疊區間的大小,如果所有行都沒有重疊區間,則輸出0。
具體如下:將輸入的區間按起點從小到大排列,然後對每個區間判斷從當前區間起點到目前的end的距離,此距離即為覆蓋距離,當覆蓋距離大於最大的距離時則更新最大距離。每次迴圈都要判斷是否需要更新end,end表示目前所有區間的最大終點值。
#include#include #include #ifndef min
#define min(a,b) ((a)<(b)?(a):(b))
#endif
int map[1000000][2];
int cmp(const void *a, const void *b)
inline int cover(int n[2], int e)
void main()
else
i++;
}fclose(fp);
n = i;
//lb_c: 對所有線段(n條)按線段的起點大小公升序排列,注意每條線段占用兩個int,所以qsort函式的第三個引數(即偏移量)為sizeof(int)*2。
// 而cmp函式中只取了指標所指的乙個int的內容進行大小比較,也就是只取了線段的起點進行比較,所以最終qsort把所有線段按起點大小排序
// 了! 這裡對qsort的使用非常巧妙!
qsort(map, n, sizeof(int)*2, cmp);
end = map[0][1];
for (i = 1; i < n; i++)
} cout<
n個區間最大重疊部分
乙個區間 0,3 1,4 1.5,5,5 2.5,4.5 3,7 最大的重疊部分 author ly public class maxoverlapdis new int,new int,new int,new int,system.out.println findmaxoverlap a publ...
無重疊區間
給定一些區間,找到需要移除的最小區間數,以使其餘的區間不重疊。樣例1 輸入 1,2 2,3 3,4 1,3 輸出 1 解釋 1,3 被移除後,剩下的區間將不再重疊。樣例2 輸入 1,2 1,2 1,2 輸出 2 解釋 需要將兩個 1,2 移除使得剩下的區間不重合。樣例3 輸入 1,2 2,3 輸出 ...
無重疊區間
最近做題發現無重疊區間出現的比較多,在此做個記錄,但願你,思維活躍,邏輯縝密,多的不扯,堅持刷題 給定乙個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。分析題意,說的是無重疊區間,那就是利用區間數字的大小做判斷唄,所以對整體陣列排序不會對整體結果造成影響。但是對做題人來說那就簡單多了,...