本文利用Java实现二分法查找 思想: 在二分查找算法中,数列已经排好序,对于要搜索的数字,我们从中间的数开始搜索,如果目标数小于中间数,则无需搜索右边的数,因为右边的数都大于中间的数,直接搜索左边的数就可以;如果目标数大于中间数,则无需搜索左边的数,因为左边的数都是小于中间数,直接搜索右边的数 注意的地方: 1、数列是排好序的,否则无法进行二分法查找 2、数列中的元素的值不能重复 3、注意if语句的判断方式,怎么处理结果 算法时间复杂度和空间复杂度: 1、最坏情况是找第一个元素或是最坏一个元素,T(n)=O(logn) 2、最好的情况是要查找最中间的元素,O(1) 空间复杂度是S(n)=n Java代码实现
/* The guess API is defined in the parent class GuessGame. @param num, your guess @return -1 if my number is lower, 1 if my number is higher, otherwise return 0 int guess(int num); */ public class Solution extends GuessGame { public int guessNumber(int n) { int i=1; int j=n; int mid=0; //使用二分法查找 while(i<=j){ //求中间数 mid=(j-i)/2+i; //guess(int num)是用来返回目标值比你猜的这个数是高了还是低了 int val=guess(mid); //-1表示我的数字比你猜的数字要小 if(val==-1) j=mid-1; else if(val==1) //+1表示我的数字比你猜的数字要大 i=mid+1; else return mid; } return -1; } }