一、寻找一个数(最基本的二分搜索)

  1. int binarySearch(int[] nums, int target) {
  2. int left = 0;
  3. int right = nums.length - 1; // 注意
  4. while(left <= right) { // 注意
  5. int mid = (right + left) / 2;
  6. if(nums[mid] == target)
  7. return mid;
  8. else if (nums[mid] < target)
  9. left = mid + 1; // 注意
  10. else if (nums[mid] > target)
  11. right = mid - 1; // 注意
  12. }
  13. return -1;
  14. }

二、寻找左侧边界的二分搜索

  1. int left_bound(int[] nums, int target) {
  2. if (nums.length == 0) return -1;
  3. int left = 0;
  4. int right = nums.length; // 注意
  5. while (left < right) { // 注意
  6. int mid = (left + right) / 2;
  7. if (nums[mid] == target) {
  8. right = mid;
  9. } else if (nums[mid] < target) {
  10. left = mid + 1;
  11. } else if (nums[mid] > target) {
  12. right = mid; // 注意
  13. }
  14. }
  15. return left;
  16. }

_

三、寻找右侧边界的二分查找

  1. int right_bound(int[] nums, int target) {
  2. if (nums.length == 0) return -1;
  3. int left = 0, right = nums.length;
  4. while (left < right) {
  5. int mid = (left + right) / 2;
  6. if (nums[mid] == target) {
  7. left = mid + 1; // 注意
  8. } else if (nums[mid] < target) {
  9. left = mid + 1;
  10. } else if (nums[mid] > target) {
  11. right = mid;
  12. }
  13. }
  14. return left - 1; // 注意