class Solution { //首先肯定是在一个类里面去做我们要做的事情 public int search(int[] nums, int target) { //定义一个方法,参数是数组nums和整数类型目标值target int low = 0,high = nums.length - 1; //low代表nums数组中最小的数的下标值(其实也就是代表这个数在数组中代表第几个数) while(low<=high){ //当什么什么的时候,无需多解释 int mid = (high - low) / 2 +low; //mid也是一个下标值,但是注意:mid的值是最大的数的下标值减去最小的数的下标值再加low int num = nums[mid]; //这里就用上mid了。也就是将数组nums中第mid个的数拿出来赋值给num,以便后面去判断这个数和target是否相等 if(num == target) { return mid; //相等就返回mid } else if (num > target) { high = mid - 1; //如果num大于target就把high的值变成mid-1 //注意:为什么? //因为num是这个数组(注意这个数组是升序)中间那个数的值, //以num的位置为界限,数组就分为两部分(较大部分和较小部分) //当num比target大的时候,肯定和和target相等的数在这个数组的较小部分里了 //所以如果想要寻找这个值,肯定要从较小的那部分里面继续用二分法查找啦! } else { //即当num小于target的时候 low = mid + 1; //原理同上 } } return -1; } }
二分法,即一分为二的方法,比如将一个数组从中间位置断开,分成两部分,在有序数组中查找某个数时会比较快。