在一个有序数组中,寻找一个target,返回其下标
public int binarySearch(int[] nums, int target) { int size = nums.length; if (size == 0) return -1; //全闭区间 int left = 0, right = size-1; while (left <= right) { int mid = left + (right - left) / 2; if (nums[mid] == target) { return mid; } else if (nums[mid] < target) { //target在右侧,缩左侧边界 left = mid+1; } else if (nums[mid] > target) { right = mid - 1; } } return -1;}
在一个有序数组中,寻找左侧边界,返回其下标
public int left_bound(int[] nums, int target) { if (nums.length == 0) return -1; //左闭右开 int left = 0, right = nums.length; while (left < right) { int mid = left + (right - left) / 2; if (nums[mid] == target) { right = mid; //缩右边区间 } else if (nums[mid] < target) { left = mid + 1; } else if (nums[mid] > target) { right = mid; //因为是开的,所以取mid } } return right;}
在一个有序数组中,寻找右侧边界,返回其下标
public int right_bound(int[] nums, int target) { if (nums.length == 0) return -1; //左闭右开 int left = 0, right = nums.length; while (left < right) { int mid = left + (right - left) / 2; if (nums[mid] == target) { left = mid + 1; ////缩左边区间 } else if (nums[mid] < target) { left = mid + 1; } else if (nums[mid] > target) { right = mid; //因为是开的 } } return left - 1;}