您的位置:首页 > 其它

lintcode--搜索旋转排序数组

2017-07-18 10:49 417 查看
假设有一个排序的按未知的旋转轴旋转的数组(比如,0
1 2 4 5 6 7 可能成为4 5 6 7 0 1 2)。给定一个目标值进行搜索,如果在数组中找到目标值返回数组中的索引位置,否则返回-1。
你可以假设数组中不存在重复的元素。

您在真实的面试中是否遇到过这个题? 

Yes

样例

给出[4, 5, 1, 2, 3]和target=1,返回 2
给出[4, 5, 1, 2, 3]和target=0,返回 -1

public class Solution {

    

    /*

    思路:

    

        定义两个指针,并求出中间值,根据中间值和target之间的比较

    */

    public int search(int[] A, int target) {

        // write your code here

        if (A == null || A.length == 0) return -1;

        int start = 0;

        int end = A.length-1;

       while (start <= end) {

            int mid = start + (end - start) / 2;//找到最中间的数

            if (A[mid] == target) {

                return mid;

            }//将a[mid]与target比较大小,再让a[mid]和target分别和a[0]和a
比较大小,

            //来确定low和high应该往哪个方向移动

            if (A[start] < A[mid]) {
4000

                // 当第一个数小于中间数时,567891234  12345

                //判断目标值大于第一个数,且小于中间  7

                if (target>=A[start] && target <= A[mid]) {

                    end = mid-1;

                } else {    //2

                    start = mid+1;

                }

            } else {//当第一个数大于中间数,45123

                // 判断目标值小于最后一个数,且目标值大于中间数  2

                if ( target <= A[end]&&target>=A[mid]) {

                    start = mid+1;

                } else {     //5

                    end = mid-1;

                }

            }

        } // while

        if (A[start] == target) {

            return start;

        }

        if (A[end] == target) {

            return end;

        }

        return -1;

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: