**Leetcode 436. Find Right Interval

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;
    }
};

猜你喜欢

转载自blog.csdn.net/u011026968/article/details/80956119
今日推荐