zoukankan      html  css  js  c++  java
  • 33. Search in Rotated Sorted Array

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

    (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

    You are given a target value to search. If found in the array return its index, otherwise return -1.

    You may assume no duplicate exists in the array.

    分析

    二分查找,
    首先判断中间数是否为所求,是则返回,否则继续;
    判断中间数是属于哪个序列,是左递增序列,还是右递增序列:
    左递增:
        判断target是否在左递增序列中,是则更新 R = M - 1;
        否则 L = M + 1;

    右递增:
        判断target是否在右递增序列中,是则更新 L = M + 1;
        否则 R = M - 1;



     
     



    代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    class Solution {
    public:
        int search(vector<int>& nums, int target) {
            int l = 0, r = nums.size() - 1, m, result = -1;
            while(l <= r){
                m = (l + r) >> 1;
                if(nums[m] == target)
                    return m;
                if(nums[l] <= nums[m])// indicate that the nums[m] is in the ascending order part
                {
                    if( nums[l] <= target && nums[m] > target){// target is in [l,m)
                        r = m - 1;
                    }
                    else//target is in [m,R)
                        l = m + 1;
                    }
                }
                else{
                    if(nums[m] < target && nums[r] >= target){ //target is in (m,r]
                        l = m + 1;
                    }
                    else{// target is in [l,m)
                        r = m - 1;
                    }
                }
            }//end of while
            return -1;
        }
    };





  • 相关阅读:
    EL表达式与JSTL
    JSP
    session
    四则运算 第二次
    第二次作业
    四则运算
    用户使用手册与测试报告
    系统设计和任务分配
    需求规格说明书和原型设计
    用户需求分析和竞品分析
  • 原文地址:https://www.cnblogs.com/zhxshseu/p/a2412c8ec0df3ca09ffcd24487101339.html
Copyright © 2011-2022 走看看