zoukankan      html  css  js  c++  java
  • 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和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.


  • 相关阅读:
    hdfs校验和
    hdfs读写策略
    hdfs架构
    hdfs数据块
    元数据
    集群的创建
    jQuery_DOM操作
    jQuery_简介_选择器
    Ajax
    MySQL整理_2_数据库操作
  • 原文地址:https://www.cnblogs.com/AlvinZH/p/9047843.html
Copyright © 2011-2022 走看看