思路
本题为查找左边界和右边界的标准模型
查找左边界
int left = 0, right = nums.size() - 1, mid = 0; //查找左边界
while (left < right)
{
mid = left + (right - left) / 2;
if (nums[mid] < target) left = mid + 1;
else right = mid;
}
查找右边界
int left = 0, right = nums.size() - 1, mid = 0;
while (left < right)
{
mid = left + (right - left + 1) / 2;
if (nums[mid] <= target) left = mid; //查找右边界
else right = mid - 1;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<vector>
using namespace std;
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, mid = 0; //查找左边界vector<int> ret;while (left < right){mid = left + (right - left) / 2;if (nums[mid] < target) left = mid + 1;else right = mid;}ret.push_back(left);right = nums.size() - 1, mid = 0;while (left < right){mid = left + (right - left + 1) / 2;if (nums[mid] <= target) left = mid; //查找右边界else right = mid - 1;}ret.push_back(right);//插入到ret表中if (nums[right] == target) return ret;else return{ -1,-1 };}
};