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

0 阅读1分钟

提交过程报错提示搜集

出现地址数组访问越界情况: 报错显示堆内存溢出。

常见情况

  • 数组访问下标访问不存在地址
  • 数组初始化问题 image.png

力扣题解:使用两次二分查找,先左查找,后右查找。返回数组下标。

class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        int N=nums.size();

            if(N==0){
                return {-1,-1};
            }


        int left=0; int right=N-1;
        while(left<right){

                int mid=(right+left)/2;
                if(nums[mid]>=target)  right=mid;
                else{
                    left=mid+1;
                }
        }

        if(nums[left]!=target)  return {-1,-1};
        int retleft=left;

        left=0;  right=N-1;

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

        }

        return {retleft,left};


    }
};