2023年8月2日 星期三

[435] Non-overlapping Intervals

找出 最多start & end的時間區間,需要刪除的最小次數
就很多個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;
}


沒有留言:

張貼留言