33.Search in Rotated Sorted Array

Posted luo-c

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了33.Search in Rotated Sorted Array相关的知识,希望对你有一定的参考价值。

给定一个已排好序的数组,将数组循环移动后,给定一个目标整数,求目标整数是否在数组中,若在,返回下标,否则,返回 -1 ,必须使用 O(log?n)时间复杂度。
Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4

思路:
题目要求O(log?n)的时间复杂度,所以必须使用二分查找。因为数组被循环移动了,所以数组相当于分为2部分,设1部分为,里面元素都比较大的,2部分为整体元素都小的,每一部分内部都是升序排列的。题目难度在于,找到 mid所处于哪一部分,因此,在使用二分查找的时候,先确定mid在哪一部分,然后再使用二分查找即可。

int search(vector<int>& nums, int target) {
    int l = 0, r = nums.size() - 1, mid = 0;
    while (l <= r) {
        mid = (l + r) / 2;
        if (nums[mid] == target) return mid;
        else if (nums[mid] >= nums[l]) {//mid处于 1 部分
            if (nums[mid] > target && nums[l] <= target) r = mid - 1;
            else l = mid + 1;
        }
        else {//mid处于2部分
            if (nums[mid] < target && nums[r] >= target) l = mid + 1;
            else r = mid - 1;
        }
    }
    return -1;
}

 

以上是关于33.Search in Rotated Sorted Array的主要内容,如果未能解决你的问题,请参考以下文章

33. Search in Rotated Sorted Array

33. Search in Rotated Sorted Array *HARD*

33. Search in Rotated Sorted Array

Leetcode[33]-Search in Rotated Sorted Array

LC.33. Search in Rotated Sorted Array

#Leetcode# 33. Search in Rotated Sorted Array