天天看點

牛客網——去哪兒網——二分查找

對于一個有序數組,我們通常采用二分查找的方式來定位某一進制素,請編寫二分查找的算法,在數組中查找指定元素。

給定一個整數數組A及它的大小n,同時給定要查找的元素val,請傳回它在數組中的位置(從0開始),若不存在該元素,傳回-1。若該元素出現多次,請傳回第一次出現的位置。

測試樣例:

public class BinarySearch {
    public int getPos(int[] A, int n, int val) {
        if(n==0)return -1;
           int left = 0;
           int right = n-1;
           int mid = (left+right)/2;
           
           while(left<=right){
               if(A[mid]==val){
                   int i = 1;
                   while(mid-i>=0&&A[mid]==A[mid-i]){
                       i++;
                   }
                   
                   return mid-i+1;
                   }
               else if(A[mid]>val){
                   right = mid-1;
                   mid = (left+right)/2;
               }else {
                   left = mid+1;
                   mid = (left+right)/2;
               }
            }
           return -1;
    }
}