思路
本題為查找左邊界和右邊界的標準模型
查找左邊界
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 };}
};