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

[LeetCode] Search in Rotated Sorted Array

时间:2015-04-18 10:07:53      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:leetcode

题意:在旋转的有序数组中搜索某个元素,无重复数据
思路:二分搜索,注意有旋转的区间的上下界的判断
代码:
    public int search(int[] A, int target) {
        return bsearch(A, target, 0, A.length - 1);
    }

    /**
     * 二分搜索,无重复元素,判断是否为rotated
     * @param A
     * @param target
     * @param l
     * @param r
     * @return
     */
    public int bsearch(int[] A, int target, int l, int r) {
        if(l <= r){
            int mid = r + (l - r) / 2;
            if(A[l] > A[r]){//无序的情况
                if(target >  A[l]){
                    if(A[l] > A[mid]) return bsearch(A, target, l + 1, mid);
                    else {
                        if(target >= A[mid])return bsearch(A, target, mid, r);
                        else return bsearch(A, target, l + 1, mid -1 );
                    }
                }else if(target == A[l])  return l;
                else {
                    if(A[l] > A[mid]){
                        if(target > A[mid]) return bsearch(A, target, mid + 1, r);
                        else return bsearch(A, target, l + 1, mid);
                    }else {
                        return bsearch(A, target, mid + 1, r);
                    }
                }
            }else {//有序的情况
                if(target == A[mid]) return mid;
                if(target > A[mid]) return bsearch(A, target, mid+1, r);
                else return bsearch(A, target, l, mid - 1);
            }

        }else return -1;
    }


[LeetCode] Search in Rotated Sorted Array

标签:leetcode

原文地址:http://blog.csdn.net/youmengjiuzhuiba/article/details/45110467

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