LeetCode 81. Search in Rotated Sorted Array II

Posted AlvinZH

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.


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

leetcode 81. Search in Rotated Sorted Array II 搜索旋转排序数组 II(中等)

LeetCode 81. Search in Rotated Sorted Array II

LeetCode:81. Search in Rotated Sorted Array II

LeetCode-81-Search in Rotated Sorted Array II

LeetCode81. Search in Rotated Sorted Array II

[LeetCode] 81. Search in Rotated Sorted Array II