57 插入區間

2021-10-10 06:34:53 字數 1418 閱讀 6580

##第一道hard

思路:將新插入的區間乙個個去比較,有交集的,取並集並放到雜湊表裡,拿新並集繼續和下乙個比較,最後做乙個排序。注意插入到雜湊表中的資料,取更大的並集即可。

題目:給出乙個無重疊的 ,按照區間起始端點排序的區間列表。

在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊(如果有必要的話,可以合併區間)。

示例 1:

輸入:intervals = [[1,3],[6,9]], newinterval = [2,5]

輸出:[[1,5],[6,9]]

示例 2:

輸入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newinterval = [4,8]

輸出:[[1,2],[3,10],[12,16]]

解釋:這是因為新的區間 [4,8] 與 [3,5],[6,7],[8,10] 重疊。

##這有個注意的點,要求返回乙個二維指標,代表每個返回的二維陣列的數量,這個分配空間應該用*returnsize=malloc(sizeof(int*));

**:

/**

* return an array of arrays of size *returnsize.

* the sizes of the arrays are returned as *returncolumnsizes array.

* note: both returned array and *columnsizes array must be malloced, assume caller calls free().

*/ typedef struct dddd;

dd *data=null;

int cmpkey(dd *a,dd *b)

void insertdata(int pre,int next)else

}}int** insert(int** intervals, int intervalssize, int* intervalscolsize, int* newinterval, int newintervalsize, int* returnsize, int** returncolumnsizes)else

}if(flag==0)

hash_sort(data,cmpkey);

dd *iter;

int k=0;

for(iter=data;iter!=null;iter=iter->hh.next)

free(data);

data=null;

*returnsize=k;

*returncolumnsizes = malloc(sizeof(int*) * (intervalssize+1));

for(i=0;ireturn res;

}

57 插入區間

發現這個題目變簡潔了。區間直接以二維陣列的形式給出,而不是自己定義的資料結構,所以不需要自己寫排序函式了。給出乙個無重疊的 按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 示例 1 輸入 intervals 1,3 6,...

57 插入區間

給出乙個無重疊的 按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 示例 1 輸入 intervals 1,3 6,9 newinterval 2,5 輸出 1,5 6,9 示例 2 輸入 intervals 1,2 3,...

57 插入區間 困難 區間劃分

給出乙個無重疊的 按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 示例 1 輸入 intervals 1,3 6,9 newinterval 2,5 輸出 1,5 6,9 示例 2 輸入 intervals 1,2 3,...