ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 56. Merge Intervals
    릿코드(LEETCODE) 2020. 2. 12. 13:34
    반응형

    https://leetcode.com/problems/merge-intervals/

     

    2차원 벡터의 각각의 요소의 값이 겹치는 부분이 없도록 병합을 하는 문제.

    input 이 몇 개가 들어오는지 명시되어 있지 않다. null 도 입력될 수 있으니 주의한다.

     

    Source

    입력으로 들어오는 vector의 요소는 순서가 보장되어 있지 않다. 오름 차순 정렬을 하고 overlap 되는 구간을 찾아 병합한다.

    class Solution {
    public:
        vector<vector<int>> merge(vector<vector<int>>& intervals) {
    
            vector<vector<int>> vvi;
            const int size = intervals.size();
            if (size == 0) {
                return vvi;
            }
            sort(intervals.begin(), intervals.end());
            int prevLeft = intervals[0][0];
            int prevRight = intervals[0][1];
            vvi.push_back({ prevLeft, prevRight });
            for (int i = 1; i < size; i++) {
    
                int cntLeft = intervals[i][0];
                int cntRight = intervals[i][1];
    
                if (prevRight >= cntLeft) {
                    prevLeft = min(cntLeft, prevLeft);
                    prevRight = max(cntRight, prevRight);
    
                    if (false == vvi.empty()) {
                        vvi.pop_back();
                    }
                }
                else {
                    prevLeft = cntLeft;
                    prevRight = cntRight;
    
                }
                vvi.push_back({ prevLeft, prevRight });
            }
    
            return vvi;
        }
    };

    24 ms 12.9 mb가 소모 됐다.

     

    아래 구문에서 pop_back()을 제거해 보자.

     if (prevRight >= cntLeft) {
     	prevLeft = min(cntLeft, prevLeft);
        prevRight = max(cntRight, prevRight);
    
    	if (false == vvi.empty()) {
    		vvi.pop_back();
    	}
    }

     

    20 ms 12.4 mb 큰 차이가 없구먼;

    class Solution {
    public:
        vector<vector<int>> merge(vector<vector<int>>& intervals) {
    
            vector<vector<int>> vvi;
            const int size = intervals.size();
            if (size == 0) {
                return vvi;
            }
            sort(intervals.begin(), intervals.end());
            int prevLeft = intervals[0][0];
            int prevRight = intervals[0][1];
            vvi.push_back({ prevLeft, prevRight });
            for (int i = 1; i < size; i++) {
    
                int cntLeft = intervals[i][0];
                int cntRight = intervals[i][1];
    
                if (prevRight >= cntLeft) {
                    prevLeft = min(cntLeft, prevLeft);
                    prevRight = max(cntRight, prevRight);
    
                    if (false == vvi.empty()) {
                        vvi[vvi.size() - 1][0] = prevLeft;
                        vvi[vvi.size() - 1][1] = prevRight;
                    } else {
                        vvi.push_back({ prevLeft, prevRight });
                    }
                }
                else {
                    prevLeft = cntLeft;
                    prevRight = cntRight;
                    vvi.push_back({ prevLeft, prevRight });
                }
                
            }
    
            return vvi;
        }
    };

     

     

    반응형

    '릿코드(LEETCODE)' 카테고리의 다른 글

    746. Min Cost Climbing Stairs  (0) 2020.02.12
    242. Valid Anagram  (0) 2020.02.12
    520. Detect Capital  (0) 2020.02.12
    146. LRU Cache  (0) 2020.02.12
    703. Kth Largest Element in a Stream  (0) 2020.02.11

    댓글

Designed by Tistory.