Skip to content

Commit 29479e1

Browse files
Update sorting.md
1 parent f945ea6 commit 29479e1

File tree

1 file changed

+20
-24
lines changed

1 file changed

+20
-24
lines changed

sorting.md

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -427,38 +427,34 @@ public:
427427

428428
### [Insert Interval In a Sorted List](https://leetcode.com/problems/insert-interval/)
429429

430-
In 2 pass found start and end bound. Start is max index with intervals\[start\]\[1\] <= newInterval\[0\] and end is min index with intervals\[end\]\[0\] <= newInterval\[1\]
430+
Insert the new interval in the intervals array at correct position, shifting all the older items. Then perform approach from Merge Intervals problem
431431

432432
```cpp
433433
class Solution {
434434
public:
435435
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval)
436436
{
437-
if (intervals.empty()) return {newInterval};
438-
int l = 0, r = intervals.size()-1;
439-
while (l <= r)
440-
{
441-
int mid = (l+r)/2;
442-
if (intervals[mid][1] == newInterval[0]) { l = mid; break; }
443-
if (intervals[mid][1] < newInterval[0]) l = mid+1;
444-
else r = mid-1;
437+
vector<vector<int>> res;
438+
int start = 0;
439+
for (int i = intervals.size()-1; i >= 0; --i) {
440+
if (newInterval[0] > intervals[i][0]) {
441+
start = i+1;
442+
break;
443+
}
445444
}
446-
int start = l; r = intervals.size()-1;
447-
while (l <= r)
448-
{
449-
int mid = (l+r)/2;
450-
if (intervals[mid][0] == newInterval[1]) { r = mid; break; }
451-
if (intervals[mid][0] < newInterval[1]) l = mid+1;
452-
else r = mid-1;
445+
446+
intervals.push_back(newInterval);
447+
for (int i = intervals.size()-1; i > start; --i) {
448+
swap(intervals[i], intervals[i-1]);
453449
}
454-
int end = r;
455-
if (start < intervals.size())
456-
newInterval[0] = min(newInterval[0], intervals[start][0]);
457-
if (end >= 0)
458-
newInterval[1] = max(newInterval[1], intervals[end][1]);
459-
intervals.erase(intervals.begin()+start, intervals.begin()+end+1);
460-
intervals.insert(intervals.begin()+start, newInterval);
461-
return intervals;
450+
res.push_back(intervals[0]);
451+
for (int i = 1; i < intervals.size(); ++i) {
452+
if (intervals[i][0] <= res.back()[1])
453+
res[res.size()-1][1] = max(res[res.size()-1][1], intervals[i][1]);
454+
else
455+
res.push_back(intervals[i]);
456+
}
457+
return res;
462458
}
463459
};
464460
```

0 commit comments

Comments
 (0)