思路:
自己想出来的解决方法,感觉还是容易的
分别找左右边界的方法,找左边界的时候不适用flag,因为需要执行target-1,这样会修改flag的值,
找有边界时,使用的就是target,这时候,可以修改flag,当flag为1时,说明出现了目标值,那么就返回范围
否则返回(-1,-1)
class Solution {
public:
int flag = 0;
vector<int> FindFtoE(vector<int>& nums,int target) {
int second = 0;
int first = 0;
second = positionNumR(nums, target) - 1;
first = positionNumL(nums, target - 1);
if (flag == 1) {
return { first ,second };
}
else {
return { -1,-1 };
}
}
int positionNumR(vector<int>& nums, int target) {
int left = 0;
int position = -1;
int right = nums.size() - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (nums[mid] <= target) {
if (nums[mid] == target) {
flag = 1;
}
left = mid + 1;
}
else {
right = mid - 1;
}
}
return left;
}
int positionNumL(vector<int>& nums, int target) {
int left = 0;
int position = -1;
int right = nums.size() - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (nums[mid] <= target) {
left = mid + 1;
}
else {
right = mid - 1;
}
}
return left;
}
};
int main() {
vector<int> res = { 5,7,7,8,8,10 };
int target = 6;
Solution ss;
vector<int> chs= ss.FindFtoE(res, target);
for (auto& ch : chs) {
cout << ch << " ";
}
cout << endl;
return 0;
}