LeetCode:Search in Rotated Sorted Array

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.

一开始做题的时候,没考虑到不rotated,就是一个升序数组的情况。这样一开始写的代码不能AC。

其实和普通的二分法差不多。只是多了几个判断步骤。

有left,right,mid 3个指针。

当A[left]<A[mid]的时候。说明left->mid这个是升序,这样拿target的比较。

如果target>mid,所以target只能在mid的右边。如果target<A[mid],这样就有两种情况,由于可能存在小值在数组的最右边。所以target可能位于mid的左边可能位于mid右边。将target与A[left]相比,小于A[left]时,是存在于mid的右边。大于[left]介于left和mid之间。

其实情况同理。


public class Solution {
     public int search(int[] A, int target) {
       
        if(A == null || A.length == 0) return -1;
        int index = -1;
        int left = 0;
        int right = A.length - 1;
        int mid = (left + right)/2 ;
        while(left<=right)
        {
            if(A[mid] == target)
            {
                index = mid;
                return index;
            }
            if(A[left]<=A[mid])
            {
                if(target>A[mid])
                {
                    left = mid + 1;
                }
                else
                {
                    if(target<A[left])
                    {
                        left = mid + 1;
                    }
                    else
                    {
                        right = mid - 1;
                    }
                }
            }
            else
            {
                if(target < A[mid])
                {
                    right = mid - 1;
                }
                else
                {
                    if(target<A[left])
                    {
                        left = mid + 1;
                    }
                    else
                    {
                        right = mid - 1;
                    }
                }
            }
            mid = (left + right)/2;
        }
        return index;       
    }
}

posted on 2014-06-10 14:06  JessiaDing  阅读(163)  评论(0编辑  收藏  举报