Skip to content

Commit 6d3d4f8

Browse files
Add 1288 in c language
1 parent 85918f7 commit 6d3d4f8

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

c/1288-Remove-Covered-Intervals.c

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
Given an array intervals where intervals[i] = [li, ri] represent the interval
3+
[li, ri), remove all intervals that are covered by another interval in the list.
4+
Return the number of remaining intervals.
5+
6+
Time: O(nlog(n)) (where n is the number of intervals)
7+
Space: O(1)
8+
*/
9+
10+
int cmp_fun(const void *const_a, const void *const_b) {
11+
const int* interval_a = *(const int **)const_a;
12+
const int* interval_b = *(const int **)const_b;
13+
if (interval_a[0] == interval_b[0])
14+
return interval_b[1] - interval_a[1];
15+
else
16+
return interval_a[0] - interval_b[0];
17+
}
18+
19+
int removeCoveredIntervals(int** intervals, int intervalsSize, int* intervalsColSize){
20+
// Sorting of intervals: a<=b ⇔ ( a[0]<b[0] || (a[0]==b[0] && a[1]>b[1] )
21+
qsort(intervals, intervalsSize, sizeof(int*), cmp_fun);
22+
23+
// Treatment of intervals sorted
24+
int end = 0;
25+
int number_remaining = intervalsSize;
26+
for (int i=0; i<intervalsSize; i++) {
27+
if (intervals[i][1]<=end) {
28+
number_remaining--;
29+
} else {
30+
end = intervals[i][1];
31+
}
32+
}
33+
return number_remaining;
34+
}

0 commit comments

Comments
 (0)