将一个升序数组在中间截断成两部分,重新组合成数组,要在数组中找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(leftA[right])) return -1; if(A[left] target&&A[left] A[right]&&A[mid] target) { left = mid+1; continue; } if(A[left] A[mid]){ right = mid-1; continue; } } return -1; }