本文主要讲述面试现场常遇见的手撕代码题:二分查找。虽然代码很好理解也很简单,但是感觉只有多练,多理解才能真的掌握。千万不要眼高手低,稳扎稳打才是王道。
一、非递归版本
public class BinarySearch {
/**
* 非递归实现
* @param array : 有序数组
* @param key :需要查找的数
* @return :返回 key 在数组 array 中的下标
*/
public static int binarySearch(int[] array, int key){
if(array.length < 1){
return -1;
}
int mid;
int start = 0;
int end = array.length - 1;
while(start <= end){
// 为了防止int溢出,最好这样写
mid = (end - start) / 2 + start;
if(key > array[mid]){
start = mid + 1;
}else if(key < array[mid]){
end = mid - 1;
}else{
return mid; // 找到了
}
}
return -1; // 没找到
}
publi