旋转过后的字符串,将其一分为二时,总有一半是排好序的,因此可以用二叉搜索~
循环判别哪一半是排过序的:
1.如果目标数字在排过序的那一半,则使用二叉搜索
2.如果在另一半,那么再将另一半分为两块判断哪一块是排过序的
3.重复1 2
#include <bits/stdc++.h>
using namespace std;
int fun(vector<int> vec, int end, int target)
{
int left = 0;
int right = end - 1;
while (left <= right)
{
int mid = left + (right - left) / 2;
if (vec[mid] == target)
return mid;
if (vec[mid] > vec[left])
{
if (vec[mid] > target && target >= vec[left])
{
right = mid - 1;
}
else
{
left = mid + 1;
}
}
else
{
if (vec[mid] < target && target <= vec[right])
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
}
return -1;
}
int main()
{
string str;
int m;
vector<int> vec;
// input.
cin >> str;
cin >> m;
int i = 0, k = -1;
int len = str.length();
for (i = 0; i < len; i++)
{
if (str[i] == ',')
{
vec.push_back(atoi(str.substr(k + 1, (i - k - 1)).c_str()));
k = i;
}
}
if (k < len - 1)
{
vec.push_back(atoi(str.substr(k + 1, (i - k - 1)).c_str()));
}
// cal.
//print.
cout << fun(vec, vec.size(), m);
return 0;
}