https://leetcode.com/problems/find-right-interval/description/
一定的小心 因为判断条件是l < r
那么当l == r的时候,答案成立的时候 其实是进不去循环的
bool cmp(pair< Interval, int > &a, pair< Interval, int > &b) {
if (a.first.start != b.first.start) return a.first.start < b.first.start;
else return a.first.end < b.first.end;
}
class Solution {
public:
vector<int> findRightInterval(vector<Interval>& intervals) {
vector< pair<Interval, int> > data;
for (int i = 0; i < intervals.size(); i++) {
data.push_back( make_pair(intervals[i], i) );
}
sort(data.begin(), data.end(), cmp);
vector<int> ret(data.size(), 0);
for (int i = 0; i < data.size(); i++) {
if (i == data.size() - 1) {
ret[ data[i].second ] = -1;
} else {
int l = i+1, r = data.size() - 1;
int find = 0;
while (l < r) {
int mid = l + (r - l)/2;
if ( data[mid].first.start >= data[i].first.end ) {
r = mid;
find = 1;
} else {
l = mid + 1;
}
}
if (find || (l == r && data[l].first.start >= data[i].first.end)) {
ret[ data[i].second ] = data[l].second;
} else {
ret[ data[i].second ] = -1;
}
}
}
return ret;
}
};