https://leetcode.com/problems/search-in-rotated-sorted-array/
该问题要求解为O(log n),并且我认为我的解为O(log n),因为我发现最小元素的过程是O(log n),然后使用二进制搜索来找到目标值也是O(log n)。但是,我的代码已超过时间限制。
int search(vector<int>& nums, int target) {
if(nums.size() == 0){
return -1;
}
int left = 0;
int right = nums.size() - 1;
while(left < right){
int middle = left + (right - left) / 2;
if(nums[left] < nums[middle]){
left = middle;
}
else{
right = middle;
}
}
if(target >= nums[0]){
return binarySearch(nums, target, 0, left - 1);
}
else{
return binarySearch(nums, target, left, nums.size() - 1);
}
}
int binarySearch(vector<int>& nums, int target, int start, int end){
if(nums.size() == 0 || (start == end && nums[start] != target)){
return -1;
}
int mid = start + (end - start) / 2;
if(nums[mid] == target){
return mid;
}
if(nums[mid] > target){
return binarySearch(nums, target, start, mid - 1);
}
else{
return binarySearch(nums, target, mid, end);
}
}
答案 0 :(得分:1)
我相信binarySearch可能会陷入无限循环。当end = start + 1时,您将获得mid = start,因此,如果nums [start]