#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
string str;
while (getline(cin,str))
{
int target;
cin >> target;
vector<int> num;
int count = 0;
for (int i = 0; i <=str.size(); i++)
{
if (str[i] == ' '|| i == str.size())
{
string temp = str.substr(count, i -count);
count = i+1;
num.push_back(stoi(temp));
}
}
int left = 0, right = num.size();
while (left < right)
{
int mid = (left + right) / 2;
if (num[mid] == target)
{
right = mid;
}
else if (num[mid] < target)
{
left = mid + 1;
}
else if (num[mid] > target)
{
right = mid;
}
}
if (left == num.size())
return -1;
if (num[left] == target)
cout << left << ' ';
left = 0, right = num.size();
while (left < right)
{
int mid = (left + right) / 2;
if (num[mid] == target)
{
left = mid + 1;
}
else if (num[mid] < target)
{
left = mid + 1;
}
else if (num[mid] > target)
{
right = mid;
}
}
if (left == 0)
return -1;
if (num[left - 1] == target)
cout << left - 1;
}
system("pause");
return 0;
}
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置,你的算法时间复杂度必须是 O(log n) 级别。
最新推荐文章于 2022-11-27 16:55:18 发布