题目
参考了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. 在排序数组中查找元素的第一个和最后一个位置