mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
422 字
2 分钟
【算法笔记】(二)二分搜索
2026-01-08
统计加载中...

1、判断某元素是否在数组中#

//arr数组必须有序
public static boolean exist (int[] arr ,int target) {
if (arr == null || arr.length == 0) {
return false;
}
int l = 0 ,r = arr.length - 1;
while (l <= r) {
int mid = l + ((r - l) >> 1);
if (arr[mid] < target) {
l = mid + 1;
} else if (arr[mid] > target) {
r = mid - 1;
} else {
return true;
}
}
return false;
}

2、寻找数组中>=target的最左位置#

//arr数组必须有序
public static int findTargetLeft (int[] arr ,int target) {
int ans = -1;
if (arr == null || arr.length == 0) {
return ans;
}
int l = 0 ,r = arr.length - 1;
while (l <= r) {
int mid = l + ((r - l) >> 1);
if (arr[mid] >= target) {
ans = mid;
r = mid - 1;
} else {
l = mid + 1;
}
}
return ans;
}

3、寻找数组中<=target的最右位置#

//arr数组必须有序
public static int findTargetRight (int[] arr ,int target) {
int ans = -1;
if (arr == null || arr.length == 0) {
return ans;
}
int l = 0 ,r = arr.length - 1;
while (l <= r) {
int mid = l + ((r - l) >> 1);
if (arr[mid] <= target) {
ans = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
return ans;
}

4、峰值问题#

//数组相邻元素不相等、峰值定义为严格大于两侧邻居
public static int findPeak (int[] arr) {
int n = arr.length;
if (n == 0) {
return -1;
}
if (arr.length == 1) {
return 0;
}
if (arr[0] > arr[1]) {
return 0;
}
if (arr[n - 1] > arr[n - 2]) {
return n - 1;
}
int l = 1 ,r = n - 2 ,ans = -1;
while (l <= r) {
int mid = l + ((r - l) >> 1);
if (arr[mid - 1] > arr[mid]) {
r = mid - 1;
} else if (arr[mid] < arr[mid + 1]) {
l = mid + 1;
} else {
ans = mid;
break;
}
}
return ans;
}
【算法笔记】(二)二分搜索
http://hgqwd.icu/posts/suanfa2/
作者
天线宝宝死于谋杀
发布于
2026-01-08
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00