通过学习后,我写的二分查找基本代码如下:
public static int search(int[] nums, int target) { int min = 0; int max = nums.length; int mid = (min + max) / 2; while (nums[mid] != target) { if (target > nums[mid]) { min = mid + 1; } if (target < nums[mid]) { max = mid - 1; } if (min > max) { return -1; } mid = (max + min) / 2; } return mid; }
但当我做相应的练习的时候,有这样一个案例:nums={-1,0,3,5,9,12},target=13;target大于nums中最大的数字12,输入这样的案例之后,编译器报错。经过debug后发现,到了最后,max=min,并不满足min>max这个条件。所以没有找到时,if语句应该为:if(min>=max).
但经过我的这样修改之后,我发现当target=9的时候,反而一般案例的时候,返回值却是-1.最后总结得出,if(min>max)语句是正确的,我们可以在最开始做个判断:将nums的最大值和最小值与target做一个判断,如果taget大于最大值或小于最小值的话,直接return -1;