就很多個start & end 的schedule,你要留下最多次的行程,把重疊的刪掉,問最少要刪掉幾個
(是不是很繞口)
原來這也有一個演算法!!!
就是先把 end 排序,因為越早結束,就可以越快開始下一個行程
因為用end 來挑選,start也會順便被挑選了(?)
選進一組後,再往後看下一組的start & end 能不能 "不重疊"
重疊的話,就不選它 a.k.a 刪掉次數加一
然後就寫完了(?)
int comp(const void *a, const void *b)
{
int* p1 = *(int **)a;
int* p2 = *(int **)b;
return p1[1]-p2[1];
}
int eraseOverlapIntervals(int** intervals, int intervalsSize, int* intervalsColSize){
qsort(intervals, intervalsSize, sizeof (int*), comp);
int ret=0;
int end = intervals[0][1];
for (int i=1;i<intervalsSize; i++)
{
if (intervals[i][1] == end)
ret++;
else if (intervals[i][0] < end)
ret++;
else
end=intervals[i][1];
}
return ret;
}
沒有留言:
張貼留言