之前写二分代码的时候总是纠结判断条件,今天把最基础的二分查找题拿出来梳理一下脉络。
class Solution {
public int search(int[] nums, int target) {
// 二分法,由于整数除法的舍位性,所以mid是可以取到left的位置,但是取不到right的位置,
int n = nums.length;
int left = 0;
int right = n; // 所以在设置right的时候,是永远不满足条件的边界值,比如说n是取不到的
int mid = (left + right) / 2;
while (left < right) { // 当left和right就差一位的时候,需要思考怎么才能在简化判断条件的情况下不陷入死循环
if (nums[mid] == target)
return mid;
else if (nums[mid] < target)
left = mid + 1; // 而left可以作为target的位置,所以在mid的基础上加了1,同时也为了满足跳出条件
else
right = mid; // right或是大于target的值,还是取不到的值
mid = (left + right) / 2;
}
return -1;
}
}