34.在排序数组中查找元素的第一个和最后一个位置

​​题目来源:

        leetcode题目,网址:34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)

解题思路:

        进行两次二分查找即可。

解题代码:

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

总结:

        官方题解也是两次二分。


你可能感兴趣的:(#,C++,LeetCode,C++)