码迷,mamicode.com
首页 > 其他好文 > 详细

Search in Rotated Sorted Array

时间:2015-09-13 12:04:14      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:otherwise   search   return   become   target   

Suppose a sorted array 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.



解法:

不含重复元素的排序数组,升序,旋转后,其为两个排序数组,A,B;B可能为空,如果为空,则整个数组为升序,A中的所有元素,比B中的要大。

注意A的末尾是转折点


left=0,right=size-1;mid=left+(right-left)/2   这里最好这样写,right+left 可能溢出

  1. nums[mid]==target  return mid

  2. nums[left]<=nums[mid]  这里存在等于号是因为left和mid 可能是同一个下标,这种情况,转折点在mid右边,可能包含mid

    a)如果nums[left]<=target&&target<nums[mid]  则right=mid-1  ,这种情况,说明target在A中,

    b)不满足a,则说明target在mid的右边,left=mid+1

  3. nums[left]>nums[mid]  这种情况下,转折点在mid的左边,

    a)如果nums[mid]<target&&nums[right]>=target  则left=mid+1;这种情况,说明target在B中或者,B为空,A为升序,(mid,right]里,

    b)不满足a,则说明target在mid的左边,自然right=mid-1


 int search(vector<int>& nums, int target) {

        int size=nums.size();

        if(size==0)

            return -1;

            

        int left=0,right=size-1;

        

        while(left<=right){

            int mid=left+(right-left)/2;//right+left may be overflow;

            if(nums[mid]==target)

                return mid;

            if(nums[left]<=nums[mid]){//这里包含等于,因为left和mid可能指向同一个元素,

                if(nums[left]<=target&&target<nums[mid]){

                    right=mid-1;

                }

                else

                    left=mid+1;

            }

            else{

                if(nums[mid]<target&&target<=nums[right])

                    left=mid+1;

                else

                    right=mid-1;

            }

        }

        return -1;

    }


Search in Rotated Sorted Array

标签:otherwise   search   return   become   target   

原文地址:http://searchcoding.blog.51cto.com/1335412/1694218

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!