Leetcode#33超出时间限制

时间:2020-05-27 03:10:13

标签: c++ arrays sorting

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);
    }
}

1 个答案:

答案 0 :(得分:1)

我相信binarySearch可能会陷入无限循环。当end = start + 1时,您将获得mid = start,因此,如果nums [start]