Friday, 18 December 2015

LeetCode Merge Intervals O(n) complexity

LeetCode Merge Intervals O(n) complexity

/**

 * Definition for an interval.

 * struct Interval {

 *     int start;

 *     int end;

 *     Interval() : start(0), end(0) {}

 *     Interval(int s, int e) : start(s), end(e) {}

 * };

 */

class Solution {

public:

    static bool myfunc(const Interval &a, const Interval &b){

        return (a.start < b.start);

    }

    vector<Interval> merge(vector<Interval>& intervals) {

        int i,j;

        vector <Interval> ans;

        if(intervals.size()==0)

         return ans;

        sort(intervals.begin(),intervals.end(),Solution :: myfunc);

        vector < Interval > :: iterator it,it1;

        it=intervals.begin();

        it1=intervals.begin();

        it1++;

        while(it!=intervals.end() && (it1)!=intervals.end()){

            if((it)->end < (it1)->start){

             ans.push_back((*it));

             it=it1;

             it1++;

            }

            else if((it)->end >= (it1)->end){

             it1++;

            }

            else

            {

             (it)->end=(it1)->end;

             it1++;

            }

        }

        if(it!=intervals.end())

         ans.push_back((*it));

        return ans;

    }

};

No comments:

Post a Comment