赞
踩
题目地址:点这里
算法原理如下:
首先,判断数组是否为空,如果为空,则直接返回{-1, -1}表示没有找到目标元素。
初始化左指针left为0,右指针right为数组长度减1。
创建一个空的vector ret,用于存储结果。
查找左端点:
重新初始化左指针left为0,右指针right为数组长度减1。
查找右端点:
将right添加到ret中。
返回ret,即包含目标元素左右边界的索引。
class Solution { public: vector<int> searchRange(vector<int>& nums, int target) { if(nums.size()==0) return {-1,-1};//处理数组为空的情况 int left=0,right=nums.size()-1; vector<int> ret; //查找左端点 while(left<right)//细节 { int mid=left+(right-left)/2;//细节 if(nums[mid]<target) left=mid+1; else if(nums[mid]>=target) right=mid; } //判断查找值是否在数组中 if(nums[left]!=target) return {-1,-1}; ret.push_back(left); left=0,right=nums.size()-1; //查找右端点 while(left<right)//细节 { int mid=left+(right-left+1)/2;//细节 if(nums[mid]>target) right=mid-1; else if (nums[mid]<=target) left=mid; } ret.push_back(right); return ret; } };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。