436. Find Right Interval

来源:互联网 发布:python web 框架 编辑:程序博客网 时间:2024/06/06 09:12

简单题,主要是题意的理解,先对start做一次排序,然后寻找每一个end在start数组中的位置,找到比他大的第一个数字所在的位置。

/** * 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 cmp(pair<int,int>&a,pair<int,int>& b)    {        if(a.first<b.first)            return true;        else            return false;    }    int findBigOrEqual(int num,vector<pair<int,int>>& starts)    {        int left=0;        int right=starts.size()-1;        if(num>starts[right].first)            return -1;        if(num<starts[left].first)            return 0;        while(left<right)        {            int mid=left+(right-left)/2;            if(starts[mid].first<num)                left=mid+1;            else if(starts[mid].first>num)                right=mid;            else                return starts[mid].second;        }        return starts[left].second;    }    vector<int> findRightInterval(vector<Interval>& intervals) {        vector<pair<int,int>> starts;        for(int i=0;i<intervals.size();i++)        {            pair<int,int> temp(intervals[i].start,i);            starts.push_back(temp);        }        sort(starts.begin(),starts.end(),cmp);//[start,index]        vector<int> result;        for(int i=0;i<intervals.size();i++)        {            int num=intervals[i].end;            result.push_back(findBigOrEqual(num,starts));        }        return result;    }};
0 0