#include <iostream>
#include <vector>
// 先找到顺序部分才能找到判断的部分,找到顺序部分分两种情况
using namespace std;
class Solution
{
public:
int search(const vector<int>& nums, int target)
{
int first=0;
int last=nums.size();
while(first != last)
{
const int mid=first+(last-first)/2;
if(nums[mid] == target)
{
return mid;
}
if(nums[first] <= nums[mid]) // 找到一个顺序结构
{
if (nums[first] <= target && target<nums[mid]) // target在这里里面
{
last=mid;
}
else // target在另外一部分
{
first=mid+1;
}
}
else // 另外可能的顺序结构
{
if (nums[mid] < target && target <= nums[last-1])
{
first=mid+1;
}
else
{
last=mid;
}
}
}
return -1;
}
};
int main()
{
vector<int> nums={5,6,7,0,1,2,3,4};
Solution s;
int target=3;
int index;
index = s.search(nums,target);
cout << index << endl;
}
2.1.3 Search in Rotated Sorted Array
最新推荐文章于 2021-05-11 00:15:45 发布