题意:

一个有序数组中有重复元素,返回第一个和最后一个target的下标。要求O(logN)。

思路:

没什么好说的,还是二分法。

vector<int> searchRange(vector<int>& nums, int target) {
	int l = 0, r = nums.size() - 1, mid, sz = nums.size(), get = -1;
	if (sz == 0)
		return{ -1,-1 };
	while (l <= r) {
		mid = (l + r) / 2;
		if (nums[mid] == target) {
			get = mid;
			break;
		}
		else if (nums[mid] > target)
			r = mid - 1;
		else
			l = mid + 1;
	}
	if (get == -1)
		return{ -1,-1 };
	int first = get, last = get;
	while (first >= 1 && nums[first - 1] == nums[first])
		--first;
	while (last <= sz - 2 && nums[last + 1] == nums[last])
		++last;
	return{ first,last };
}