public class BinarySearch {
/**
* 第一个等于目标值
*/
public int firstEqual(int[] nums, int target) {
int left = 0, right = nums.length;
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid;
}
}
return nums[left] == target ? left : -1;
}
/**
* 最后一个等于目标值
*/
public int lastEqual(int[] nums, int target) {
int left = 0, right = nums.length;
while (left < right) {
int mid = left + (right - left + 1) / 2;
if (nums[mid] > target) {
right = mid - 1;
} else {
left = mid;
}
}
return nums[left] == target ? left : -1;
}
/**
* 第一个大于等于目标值
*/
public int firstGreaterEqual(int[] nums, int target) {
int left = 0, right = nums.length;
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid;
}
}
return nums[left] >= target ? left : -1;
}
/**
* 最后一个小于等于目标值
*/
public int lastLessEqual(int[] nums, int target) {
int left = 0, right = nums.length;
while (left < right) {
int mid = left + (right - left + 1) / 2;
if (nums[mid] > target) {
right = mid - 1;
} else {
left = mid;
}
}
return nums[left] <= target ? left : -1;
}
public static void main(String[] args) {
BinarySearch search = new BinarySearch();
int[] ints = new int[]{2, 4, 5, 5, 6, 7, 7, 8, 9, 9, 10};
System.out.println(search.firstEqual(ints, 7));
System.out.println(search.lastEqual(ints, 7));
System.out.println(search.firstGreaterEqual(ints, 5));
System.out.println(search.lastLessEqual(ints, 9));
}
}
二分查找
最新推荐文章于 2022-01-12 09:58:33 发布