二分的收敛位置模板
- 需求:现在需要一个二分查找代码,并且能够帮助我直接确认最后收敛到哪个点
coding
package com.webapp;
import org.junit.jupiter.api.Test;
import java.util.*;
public class binary {
/**
* 假定target不在nums里,l和r最后的定位
*/
@Test
public void binaryNotExists() {
int[] nums = {1, 5, 7, 9, 9, 9, 9, 11, 15};
int target = 9;
int l = 0, r = nums.length;
while (l < r) {
int mid = (l + r) / 2;
if (nums[mid] < target) l = mid + 1;
else r = mid;
}
System.out.println("l:" + l + ",r:" + r);
}
}
直接上结论,只要按照这套模板走,不论target是否存在,不论target的存在是否重复,最后l和r会收敛于从左往右第一个不满足nums[mid] < target这个条件的点