s4553711
5/10/2017 - 2:36 PM

34.cpp

class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        vector<int> result;
        int left_i = searchLeftIndex(nums, target),
            right_i = searchRightIndex(nums, target);
            
        cout << left_i << endl;
        cout << right_i << endl;
        if (left_i < nums.size() && nums[left_i] == target) {
            result.push_back(left_i);
            result.push_back(right_i);
        } else {
            result.push_back(-1);
            result.push_back(-1);            
        }
        return result;
    }
    
    int searchLeftIndex(vector<int>& nums, int target) {
        int left = 0, right = nums.size();
        while(left < right) {
            int mid = left + (right - left)/2;
            if (nums[mid] >= target) {
                right = mid;
            } else {
                left = mid + 1;
            }
        }
        return left;
    }
    
    int searchRightIndex(vector<int>& nums, int target) {
        int left = 0, right = nums.size();
        while(left < right) {
            int mid = left + (right - left)/2;
            if (nums[mid] > target) {
                right = mid;
            } else {
                left = mid + 1;
            }
        }
        return right-1;        
    }
};