Skip to content

Commit ed1b777

Browse files
authored
Create: 0057-insert-interval.c
1 parent 94e284c commit ed1b777

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

Diff for: c/0057-insert-interval.c

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
int** insert(int** intervals, int intervalsSize, int* intervalsColSize, int* newInterval, int newIntervalSize, int* returnSize, int** returnColumnSizes) {
2+
// Create a result array to store the merged intervals
3+
int** result = (int**)malloc(sizeof(int*) * (intervalsSize + 1));
4+
*returnColumnSizes = (int*)malloc(sizeof(int) * (intervalsSize + 1));
5+
6+
int i = 0, j = 0;
7+
8+
// Add intervals that end before the new interval starts
9+
while (i < intervalsSize && intervals[i][1] < newInterval[0]) {
10+
result[j] = (int*)malloc(sizeof(int) * 2);
11+
result[j][0] = intervals[i][0];
12+
result[j][1] = intervals[i][1];
13+
(*returnColumnSizes)[j] = 2;
14+
j++;
15+
i++;
16+
}
17+
18+
// Merge overlapping intervals
19+
while (i < intervalsSize && intervals[i][0] <= newInterval[1]) {
20+
newInterval[0] = (newInterval[0] < intervals[i][0]) ? newInterval[0] : intervals[i][0];
21+
newInterval[1] = (newInterval[1] > intervals[i][1]) ? newInterval[1] : intervals[i][1];
22+
i++;
23+
}
24+
25+
// Add the merged interval
26+
result[j] = (int*)malloc(sizeof(int) * 2);
27+
result[j][0] = newInterval[0];
28+
result[j][1] = newInterval[1];
29+
(*returnColumnSizes)[j] = 2;
30+
j++;
31+
32+
// Add remaining intervals
33+
while (i < intervalsSize) {
34+
result[j] = (int*)malloc(sizeof(int) * 2);
35+
result[j][0] = intervals[i][0];
36+
result[j][1] = intervals[i][1];
37+
(*returnColumnSizes)[j] = 2;
38+
j++;
39+
i++;
40+
}
41+
42+
// Update the return size
43+
*returnSize = j;
44+
45+
return result;
46+
}

0 commit comments

Comments
 (0)