拿到题目,看到时间要求O(logn),立刻想到了折半查找
已通过的代码如下:
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
//折半查找思路
int low,high,mid,len;
len=nums.size();
low=0;
high=len-1;
vector<int> result(2,-1); //初始化返回两个-1
if(len == 0)
return result; //容易忽略输入为空的情况
while(low <= high)
{
mid = ( low + high )/2;
if(target == nums[mid]) //等于有些麻烦,需要从左右两侧查找,确定范围
{
int i = mid;
int j = mid;
while ((i>=0) && (nums[i] == target)) i--;
if(i<0)
result[0]=0;
else
result[0]=i+1; //用自增或自减,先增还是先操作顺序位置容易出错,所以直接加1或-1