##第一道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,...