[algorithm][leetcode] 56. Merge Intervals

임택·2020년 2월 14일
0

알고리즘

목록 보기
10/63
/**
 * @param {number[][]} intervals
 * @return {number[][]}
 */
var merge = function(arr) {
    if (arr.length <= 1) return arr;
    
    // sort
    arr.sort((a, b) => {
        if (a[0] == b[0])
            return a[1] - b[1];
        return a[0] - b[0];
    });
    
    //merge
    let prev = arr.shift();
    const answer = [prev];
    for (const curr of arr) {
        if (prev[1] >= curr[0]) {
            prev[1] = Math.max(prev[1], curr[1]);
            continue;
        }
        
        answer.push(curr);
        prev = curr;
    }
    
    return answer;
};

// var merge = function(arr) {
//     let len = arr.length;
    
//     // sort
//     arr.sort((a, b) => {
//         if (a[0] == b[0])
//             return a[1] - b[1];
//         return a[0] - b[0];
//     });
    
//     // merge
//     const answer = [];
//     for (let i = 0; i < len - 1; i++) {
//         const currS = arr[i][0];
//         const currE = arr[i][1];
//         const nextS = arr[i + 1][0];
//         const nextE = arr[i + 1][1];
        
//         if (currE >= nextS) {
//             // console.log('>> ', arr[i], arr[i + 1], len, i);
//             if (currE >= nextE) {
//                 arr.splice(i + 1, 1);
//             } else {
//                 arr[i + 1][0] = currS;
//                 arr.splice(i, 1);
//             }
//             // console.log(arr);
//             i--;
//             len = arr.length;
//         }
//     }
    
//     return arr;
// };
profile
캬-!

0개의 댓글