二分查找(折半查找)

1、寻找一个数

二分查找的通用模板如下:

  1. public int binarySearch(int[] nums, int target) {
  2. int left = 0;
  3. int right = nums.length - 1;
  4. while(left <= right) {
  5. /** 注意!
  6. * 这里采用 int mid = (right - left) / 2 + left; 是为了防止溢出
  7. * 使用 int mid = (right + left) / 2; 得出来的结果值是一样的
  8. **/
  9. int mid = (right - left) / 2 + left; //取中间数
  10. if (nums[mid] == target) {
  11. return target;
  12. }else if (nums[mid] < target) {
  13. left = mid + 1;
  14. }else if (nums[mid] > target) {
  15. right = mid - 1;
  16. }
  17. }
  18. return ...;
  19. }

2、寻找左侧边界

3、寻找右侧边界