二分法
具体内容及注意问题
迭代操作
- 首先选择有序数组中间的数字和需要查找的目标值比较
- 相等返回result
- 不相等
- 大于目标值,则中间数字向右的所有数字都大于目标值。
- 小于目标值,则中间数字向左的所有数字都小于目标值。
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
数组长度的奇偶问题
两边数量不一样是一定会出现的情况
n为偶数,(n-1)%2不为0。
n为奇数,下一次迭代为偶数,还是一样的,本质是不变的。
无非是多排除一个数字或者少排除一个数字。
边界问题
代码
package 二分法;
public class Dichotomy_ {
public static void main(String[] args) {
int N = 9;
int[] nums= {-1,0,3,5,9,12};
int result = Dichotomy_Borden_Light(nums,nums.length,N);
System.out.println("Borden_Light:"+result);
}
public static int Dichotomy_Borden_Light(int[] arrgs, int size, int target) {
//[left,right]
int left = 0;
int right = size -1;
//when left == right,still work
while(left <= right) {
//right will change
int middle = left + ((right - left)/2);
if(arrgs[middle] > target) {
//target in left
right = middle - 1;
} else if(arrgs[middle] < target) {
//target in right
left = middle + 1;
} else {
return middle;
}
}
return -1;
}
}
//
//Borden_Light:4