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

思路和时间复杂度

  1. 思路:先找到中间数,如果没找到就返回{-1,-1},如果找到了就以当前节点为中点,向两边扩
  2. 时间复杂度:       O(logn)

代码

class Solution {
public:
    vector searchRange(vector& nums, int target) {
        vector res;
        if(nums.size() == 0) return {-1,-1};
        // 左闭右开
        int left = 0, right = nums.size();
        int cur = -1;
        while(left < right){
            int mid = (left + right) / 2;
            if(nums[mid] < target){
                left = mid + 1;
            }else if(nums[mid] > target){
                right = mid;
            }else{
                cur = mid;
                break;
            }
        }
        if(cur == -1) return {-1,-1};
        left = cur;
        right = cur;
        for(int i = cur; i >= 0; i--){
            if(nums[i] != target){
                break;
            }else{
                left=i;
            }
        }
        for(int i = cur; i < nums.size(); i++){
            if(nums[i] != target){
                break;
            }else{
                right=i;
            }
        }
        return {left, right};
    }
};

你可能感兴趣的:(力扣,#,数组,leetcode,算法,数据结构)