leetcode34

/*简单二分题目 在每次二分决策的时候对应控制选择左区间或者右区间即可*/
class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
            int len = nums.size();
            int left , right , mid;
            int first , last;
            vector<int> ans;
            if(len == 0){
                 ans.push_back(-1);  
                 ans.push_back(-1); 
                 return ans;  
            }
            /*first位置*/
            left = 0;
            right = len - 1;
            while(left < right){
                 mid = (left + right)/2;
                 if(nums[mid] >= target)      right = mid;
                 else if(nums[mid] <  target) left = mid + 1;           
            }
            if(nums[left] != target) first = -1;
            else                     first = left;
            ans.push_back(first);
            
            /*计算last位置*/
            left = 0;
            right = len - 1;
            while(left  < right){
                 mid = (left + right)/2 + 1;
                 if(nums[mid] > target)        right = mid - 1;
                 else if(nums[mid] <=  target) left = mid;           
            }

            if(first == -1)  last = -1;
            else             last = left;
            ans.push_back(last);
            return ans;
    }
};
原文地址:https://www.cnblogs.com/rhythmic/p/13767347.html