版权声明:转载请联系博主 https://blog.csdn.net/zxtalentwolf/article/details/84331136
思路很简单,分类讨论:
如果要查找的数小于数组第一个数,那就在旋转后的后半数组
如果要查找的数大于数组第一个数,那就在前半数组找
坑点:
1.注意空输入
2.注意看是否有可能有重复的数存在,这个题是没有重复的数的
//剑指offer上面有
const int x=[]{
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
return 0;
}();
class Solution {
public:
int search(vector<int>& nums, int target) {
if(nums.empty()) return -1;
if(target >= nums[0]){
int l = 0;
int r = nums.size() - 1;
while(l <= r){
int m = l + ((r - l) >> 1);
if(nums[m] == target) return m;
if(nums[m] < nums[0]){
r = m - 1;
continue;
}
if(nums[m] < target){
l = m + 1;
}else{
r = m - 1;
}
}
}else if(target <= nums[nums.size()-1]){
int l = 0;
int r = nums.size() - 1;
while(l <= r){
int m = l + ((r - l) >> 1);
if(nums[m] == target) return m;
if(nums[m] > nums[nums.size()-1]){
l = m + 1;
continue;
}
if(nums[m] < target){
l = m + 1;
}else{
r = m - 1;
}
}
}
return -1;
}
};