LeetCode 81. Search in Rotated Sorted Array II

问题链接

LeetCode 81. Search in Rotated Sorted Array II

题目解析

给定一个“升序”的数组,从中寻找目标值。“升序”:旋转后的升序,例如 [4,5,1,2,3]。

时间限制:\(O(lgN)\)

解题思路

本题与上一题LeetCode 33. Search in Rotated Sorted Array几乎一模一样,唯一的改变是可以有 重复 的数据。重复的数据有什么影响呢?

上一题中,我们找到的规律是:如果中间值小于最右值,则右半段绝对升序,若中间值大于最右值,则左半段绝对升序。如果出现了重复数字,影响只有一个——中间值等于最右值。这种情况怎么办呢?直接把最右值去掉即可(即right--)。

除此之外,其他代码与上一题相同。

参考代码

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

相似题目

LeetCode 33. Search in Rotated Sorted Array


LeetCode All in One题解汇总(持续更新中...)

本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.


posted @ 2018-05-16 19:57  AlvinZH  阅读(455)  评论(0编辑  收藏  举报