Search in Rotated Sorted Array - LeetCode

Posted 真子集

tags:

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

题目链接

Search in Rotated Sorted Array - LeetCode

注意点

  • 题目给的序列是一个有序数组按某个轴旋转后的数组
  • 要求时间复杂度为O(logn)

解法

解法一:根据题目的时间复杂度O(logn)要求,很容易想到要用二分搜索。但是二分搜索要求数组是有序的,这样才能判断target在左半边还是右半边,题目的数组并不是整个都是有序的。根据nums的特点可以发现要么[left,mid]是有序的要么[mid,right]是有序的。如果nums[left] < nums[mid]成立可以说明[left,mid]有序,反之[mid,right]有序。在确定了哪半边有序之后就可以用两端端点判断target是否在区间内,进而确定接下来搜索左半边或是右半边。

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int low = 0,high = nums.size()-1;
        while(low <= high)
        {
            int mid = low + (high-low)/2;
            if(nums[mid] == target) return mid;
            if(nums[low] <= nums[mid])
            {
                if(target >= nums[low] && target <= nums[mid]) high = mid-1;
                else low = mid+1;
            }
            else
            {
                if(target >= nums[mid] && target <= nums[high]) low = mid+1;
                else high = mid-1;
            }
        }
        return -1;
    }
};

小结

  • 二分搜索变种题Search in Rotated Sorted Array - LeetCode

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

Search in Rotated Sorted Array

33. Search in Rotated Sorted Array

33. Search in Rotated Sorted Array

33. Search in Rotated Sorted Array

Leetcode Search in Rotated Sorted Array

33. Search in Rotated Sorted Array *HARD*