題目描述
有一個排過序的數組,包含n個整數,但是這個數組向左進行了一定長度的移位,例如,原數組爲[1,2,3,4,5,6],向左移位5個位置即變成了[6,1,2,3,4,5],現在對於移位後的數組,需要查找某個元素的位置。請設計一個複雜度爲log級別的算法完成這個任務。
給定一個int數組A,爲移位後的數組,同時給定數組大小n和需要查找的元素的值x,請返回x的位置(位置從零開始)。保證數組中元素互異。
[6,1,2,3,4,5],6,6
返回:0
import java.util.*;
public class Finder {
public int findElement(int[] A, int n, int x)
{
int res = search(A,0,n-1,x);
return res;
}
public int search(int[]a,int left,int right,int x)
{
//總是事先搜索正常排序的半邊
if(right<left) return -1;
int mid = (left+right)/2;
if(x==a[left])
return left;
if(x==a[right])
return right;
if(x==a[mid])
return mid;
if(a[left]<a[mid])
//左半邊爲正常排序
{
if(x>a[left]&&x<a[mid])
return search(a,left,mid-1,x);
else
return search(a,mid+1,right,x);
}
else if(a[mid]<a[right])
//右半邊是正常排序
{
if(x>a[mid]&&x<a[right])
return search(a,mid+1,right,x);
else
return search(a,left,mid-1,x);
}
return -1;
}
}