二分(待优化)
class Solution {
public:
int search(vector<int>& nums, int target) {
if(nums.size() == 0){
return -1;
}
if(nums.size() == 1){
return nums[0] == target ? 0 : -1;
}
int minIndex = findMin(nums);
int l = minIndex, r = nums.size() - 1;
while(l <= r){
int mid = (l + r) / 2;
if(nums[mid] == target) {
return mid;
}else if(nums[mid] <= target) {
l = mid + 1;
}else{
r = mid - 1;
}
}
l = 0;
r = minIndex - 1;
while(l <= r){
int mid = (l + r) / 2;
if(nums[mid] == target) {
return mid;
}else if(nums[mid] <= target) {
l = mid + 1;
}else{
r = mid - 1;
}
}
return -1;
}
int findMin(vector<int>& nums){
int l = 0, r = nums.size() - 1;
if(nums[nums.size() - 1] > nums[0]){
return 0;
}
while(l < r){
int mid = (l + r) / 2;
if(nums[0] <= nums[mid]) {
l = mid + 1;
}else{
r = mid;
}
}
return l;
}
};
题目链接:https://leetcode-cn.com/problems/search-in-rotated-sorted-array/