参考了y总讲的这题 789. 数的范围 自己是这样写的;
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> result(2, -1);
int l = 0, r = nums.size() - 1;
while (l < r)
{
int mid = l + (r - l) / 2;
if (nums[mid] < target) l = mid + 1;
else r = mid;
}
if (nums.size() == 0 || nums[l] != target) return result;
else result[0] = l;
l = 0, r = nums.size() - 1;
while (l < r)
{
int mid = l + (r - l) / 2 + 1;
if (nums[mid] > target) r = mid - 1;
else l = mid;
}
result[1] = l;
return result;
}
};
分析过程见下图:
然后说明一个要注意的点,也是本人写第一次代码然后提交报错的地方:
注意这条语句:
if (nums.size() == 0 || nums[l] != target) return result;
不要写成
if (nums[l] != target) return result;
因为如果nums是空的,那么就会发生越界的错误,一定要先判断能不能执行nums[l]
(如果nums
没有元素是空的就不能执行)
卡哥的讲解也蛮有助于理解这题的:34. 在排序数组中查找元素的第一个和最后一个位置
标签:target,nums,int,位置,mid,34,查找,result,size From: https://www.cnblogs.com/hisun9/p/18522377