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

Search in Rotated Sorted Array

时间:2014-09-18 11:32:53      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:style   color   io   os   java   ar   for   div   art   

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.

答案

public class Solution
{
    int search(int[] A, int start, int end, int target)
    {
        if (start > end)
        {
            return -1;
        }
        if (start == end)
        {
            if (A[start] == target)
            {
                return start;
            }
            else
            {
                return -1;
            }
        }
        int middle = (int)(((long)start + (long)end) / 2);
        if (A[middle] == target)
        {
            return middle;
        }
        if (A[middle] > target)
        {
            return search(A, start, middle - 1, target);
        }
        return search(A, middle + 1, end, target);
    }

    public int findMiddle(int[] A, int start, int end)
    {
        if (start >= end)
        {
            return -1;
        }
        if (start + 1 == end)
        {
            if (A[start] > A[end])
            {
                return start;
            }
            return -1;
        }
        if (A[start] < A[end])
        {
            return -1;
        }
        int middle = (int)(((long)start + (long)end) / 2);
        if (A[middle] > A[start])
        {
            if (A[middle] > A[middle + 1])
            {
                return middle;
            }
            return findMiddle(A, middle, end);
        }
        else
        {
            return findMiddle(A, start, middle);
        }
    }

    public int search(int[] A, int target)
    {
        if (A == null)
        {
            return -1;
        }
        int middle = findMiddle(A, 0, A.length - 1);
        if (middle < 0)
        {
            return search(A, 0, A.length - 1, target);
        }
        else
        {
            if (A[0] > target)
            {
                return search(A, middle + 1, A.length - 1, target);
            }
            return search(A, 0, middle, target);
        }
    }
}


Search in Rotated Sorted Array

标签:style   color   io   os   java   ar   for   div   art   

原文地址:http://blog.csdn.net/jiewuyou/article/details/39368799

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