有序数切断重组

将一个升序数组在中间截断成两部分,重新组合成数组,要在数组中找target 返回index,不在数组中返回-1

主要思想还是二分  

只是分类讨论的情况比二分的多。

/**
 * leetcode rotated Array
 * 将一个有序(不妨假设是升序吧)的数组切割后重组,找出目标元素。 变相的二分查找
 * 有两种 1.数组无重复元素 2. 数组有重复的元素
 * 若target不在数组中,则返回-1  时间复杂度lg2n
 * @author admin
 */


public static int search(int [] A,int target){
        int len =A.length;
        if(len==0) return -1;
        else if(len==1) return A[0]==target?0:-1;
        int left =0,right=len-1;
        while(left<right){
            int mid = left+(right-left)/2;
            if(target==A[mid]) return mid;
            else if(target ==A[left]) return left;
            else if(target==A[right]) return right;
            //没有切割的情况
            if(A[left]<A[right]&&(target<A[left]||target>A[right])) return -1;
            if(A[left]<A[mid]&&A[mid]>target&&A[left]<mid) {
                right = mid-1;
                continue;
            }
            if(A[left]>A[right]&&A[mid]<target&&A[right]>target) {
                left = mid+1;
                continue;
            }
            if(A[left]<A[mid]&&A[mid]<target){
                left = mid+1;
                continue;
            } 
            if(A[left]>A[mid]){
                right = mid-1;
                continue;
                
            }
            
        }
        
        
        return -1;
        
        
    }
原文地址:https://www.cnblogs.com/CongLollipop/p/6636613.html