Every day a leetcode
题目来源:435. 无重叠区间
解法1:贪心
求最少的移除区间个数,等价于尽量多保留不重叠的区间。
在选择要保留区间时,区间的结尾十分重要:选择的区间结尾越小,余留给其它区间的空间就越大,就越能保留更多的区间。
所以我们采取的贪心策略为:优先保留结尾小且不相交的区间。
具体实现方法为:先把区间按照结尾的大小进行增序排序,每次选择结尾最小且和前一个选择的区间不重叠的区间。
代码:
int cmpfunc(const int **a, const int **b)
{
return ((*a)[1] - (*b)[1]);
}
int eraseOverlapIntervals(int **intervals, int intervalsSize, int *intervalsColSize)
{
int n = intervalsSize;
if (n == 0)
return 0;
qsort(intervals, n, sizeof(int *), cmpfunc);
int pre = intervals[0][1];
int removed = 0;
for (int i = 1; i < n; i++)
{
if (intervals[i][0] < pre)
removed++;
else
pre = intervals[i][1];
}
return removed;
}
结果:

复杂度分析:

利用贪心算法解决无重叠区间问题
该文章介绍了如何使用贪心策略解决435号LeetCode问题——无重叠区间。通过将区间按结束时间排序,然后依次选择不与前一个选择的区间重叠的区间,可以找到最少需要移除的区间数量。文章提供了具体的代码实现,包括比较函数和主要逻辑。
679

被折叠的 条评论
为什么被折叠?



