程序員面試金典(排序與查找):元素查找(java解法)

題目描述

有一個排過序的數組,包含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;
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章