算法:二分法查找(折半查找法)
//二分查找法(折半查找法)
public static int halfSearch(int[] arr,int number){
int min =0; //最小下標
int max =arr.length-1; //最大下標
int mid = 0; //中間下標
while (min<=max){
//沒找到,更新范圍繼續(xù)找
mid = (min+max)/2;
if (arr[mid]>number){ //number在mid的左邊
max = mid-1; //改變最大下標
}else if(arr[mid]<number){ //number在mid的右邊
min = mid+1; //改變最小下標
}else{
return mid;
}
}
return -1;
}
這是最經(jīng)典的折半查找,而在面試的時候往往會對某些經(jīng)典的數(shù)據(jù)結(jié)構(gòu)和算法進行魔改唆阿,這道題總是被改成以下的問題:
1.使用二分法對一個數(shù)組中的數(shù)據(jù)進行查找砸民,返回目標數(shù)值所在的下標:包含與目標值重復(fù)的所有左邊的值
2.使用二分法對一個數(shù)組中的數(shù)據(jù)進行查找诫惭,返回目標數(shù)值所在的下標:包含與目標值重復(fù)的所有右邊的值
3.使用二分法對一個數(shù)組中的數(shù)據(jù)進行查找,返回所有目標數(shù)值所在的下標
這些雷你踩過了么秽晚?
PS:今天剛踩到了3號復(fù)合雷呕缭,前來報到堵泽!