Skip to content

Commit 2e305f3

Browse files
author
beck chen
committed
some more sorting problems
1 parent 43219ae commit 2e305f3

File tree

4 files changed

+35
-12
lines changed

4 files changed

+35
-12
lines changed

Leetcode Visuals/Sorting and Searching.drawio

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

leetcode practice/sorting and searching/kthLargestElementInAnArray.js

Whitespace-only changes.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* @param {number[][]} intervals
3+
* @return {number[][]}
4+
*/
5+
var merge = function (intervals) {
6+
intervals.sort((interval1, interval2) => interval1[0] - interval2[0]);
7+
8+
const mergedCollection = [intervals[0]];
9+
for (let intervalIndex = 1; intervalIndex < intervals.length; intervalIndex++) {
10+
const intervalObj = intervals[intervalIndex];
11+
const mergedObj = mergedCollection[mergedCollection.length - 1];
12+
13+
// no overlap
14+
if (intervalObj[0] > mergedObj[1]) {
15+
// simply append to mergedCollection
16+
mergedCollection.push(intervalObj);
17+
} else {
18+
mergedObj[1] = Math.max(mergedObj[1], intervalObj[1]);
19+
}
20+
}
21+
22+
return mergedCollection;
23+
};

mergeIntervals.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,29 +25,29 @@
2525
* @param {Interval[]} intervals
2626
* @return {Interval[]}
2727
*/
28-
var merge = function(intervals) {
29-
if (!intervals || intervals.length === 0){ return [];}
30-
28+
var merge = function (intervals) {
29+
if (!intervals || intervals.length === 0) { return []; }
30+
3131
// sort intervals forwards, as in one with small start comes first
3232
// ex. [[1,3],[8,10],[2,6]] -> [[1,3],[2,6],[8,10]]
33-
intervals.sort((elem1, elem2) => elem1.start-elem2.start);
33+
intervals.sort((elem1, elem2) => elem1.start - elem2.start);
3434
// put the biggest one, [8,10] into results first
3535
let results = [intervals[0]];
36-
36+
3737
// loop through the rest
38-
for(let ii=1;ii<intervals.length;ii++){
38+
for (let ii = 1; ii < intervals.length; ii++) {
3939
let elem = intervals[ii];
40-
let prevElem = results[results.length-1];
40+
let prevElem = results[results.length - 1];
4141
// this is to handle case of no overlap
4242
// in this case, we'll want to keep prevElem in our results since it's in order but also add elem to results (like when we see [2,6],[8,10]) results should contain both of these)
43-
if (elem.start > prevElem.end){
43+
if (elem.start > prevElem.end) {
4444
results.push(elem);
45-
}
45+
}
4646
// this is where we handle the overlapping case. we want to keep the prevElem, but update its "end" to the end of the current one
4747
else {
48-
results[results.length-1].end = Math.max(elem.end, prevElem.end);
48+
results[results.length - 1].end = Math.max(elem.end, prevElem.end);
4949
}
5050
}
51-
51+
5252
return results;
5353
};

0 commit comments

Comments
 (0)