二分查找
本文最后更新于:2024年2月12日 晚上
二分查找
适用于在「有序」的数据中快速的找到目标值。
时间复杂度:$O(nlogn)$
// 找到大于等于目标数的第一个位置
public int lower_bound(int[] nums, int target) {
int low = 0, high = nums.length - 1;
while(low < high){
int mid = (high - low) / 2 + low;
if (nums[mid] < target) {
low = mid + 1;
} else {
high = mid;
}
}
return low;
}
// 找到大于目标数的第一个位置
public static int upper_bound(int[] nums, int target) {
int low = 0, high = nums.length - 1;
while (low < high) {
int mid = (high - low) / 2 + low;
// System.out.println(mid);
if (nums[mid] <= target) {
low = mid + 1;
} else {
high = mid;
}
}
return low;
}
本文作者: MerickBao
本文链接: https://merickbao.top/post/%E7%AE%97%E6%B3%95/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!