简单题,主要是题意的理解,先对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;
}
};