package org.example;
/**
* 二分查找插入位置的实现
*/
public class TwoSplitSearch {
public static void main(String[] args) {
int[] nums = new int[]{1, 3, 4, 5, 7, 9};
// 输出插入位置
System.out.println(searchInsert(nums, 6));
}
public static int searchInsert(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
return twoSplitSearch(nums, left, right, target);
}
public static int twoSplitSearch(int[] nums, int left, int right, int target) {
// 区间无效时,left 就是插入位置
if (left > right) {
return left;
}
int mid = left + ((right - left) / 2);
if (nums[mid] == target) {
return mid;
} else if (nums[mid] > target) {
// 查找左半边,排除 mid
return twoSplitSearch(nums, left, mid - 1, target);
} else {
// 查找右半边,排除 mid
return twoSplitSearch(nums, mid + 1, right, target);
}
}
}