二分模板的使用选法

《标准二分查找》  

这一类二分的特点是:

  2.没有重复元素(如果有重复元素对结果没有影响的话也可以用)

  3.单纯的是查找出这一区间存在的确定的值

比如:在数据范围为1~100的有序数组中查找出数50

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

《二分查找右边界或二分查找左边界》

这一类二分的特点是:

  1. 数组有序,但包含重复元素
  2. 数组部分有序,且不包含重复元素
  3. 数组部分有序,且包含重复元素

以前y总介绍的方法,我在写题是总感觉不太灵活,于是我找到了一种更好的写法

以二分查找右边界为例: 

这里用res来记录正确答案,如果有更优则res一定会得到更新

 

posted @ 2022-08-13 21:05  次林梦叶  阅读(30)  评论(0)    收藏  举报