二分模板的使用选法
《标准二分查找》
这一类二分的特点是:
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 }
《二分查找右边界或二分查找左边界》
这一类二分的特点是:
- 数组有序,但包含重复元素
- 数组部分有序,且不包含重复元素
- 数组部分有序,且包含重复元素
以前y总介绍的方法,我在写题是总感觉不太灵活,于是我找到了一种更好的写法
以二分查找右边界为例:
这里用res来记录正确答案,如果有更优则res一定会得到更新


浙公网安备 33010602011771号