Search for a Range

class Solution {
public:
    int findLastPosition(vector<int>& nums, int target){
        int len = nums.size();
        int left = 0,right = len-1;

        while(left +1 < right){
            int mid = left + (right - left)/2;
            if(target == nums[mid]){
                left = mid;
            }
            else if(target > nums[mid]){
                left = mid;
            }
            else{
                right = mid;
            }
        }
        // notice right is first
        if(target == nums[right]){ return right;}

        if(target == nums[left]){ return left;}

        return -1;
    }

    int findFirstPosition(vector<int>& nums, int target){
        int len = nums.size();
        int left = 0,right = len-1;

        while(left +1 < right){
            int mid = left + (right - left)/2;
            if(target == nums[mid]){
                right = mid;
            }
            else if(target > nums[mid]){
                left = mid;
            }
            else{
                right = mid;
            }
        }
        //notice left is first
        if(target == nums[left]){ return left;}

        if(target == nums[right]){ return right;}

        return -1;
    }
    vector<int> searchRange(vector<int>& nums, int target) {
        int last = findLastPosition(nums,target);
        int first = findFirstPosition(nums,target);

        vector<int> v;
        v.push_back(first);
        v.push_back(last);

        return v;
    }
};