二分查找
https://leetcode.com/problems/binary-search/
二分查找是最基本的查找算法,时间复杂度是 Olog(n),其中还会包含很多的变种,比如:
- 第一次出现 target 的位置
- 最后一次出现 target 的位置
- 第一次出现大于 target 的地方
- 最后一次出现大于 target 的地方
应用场景:
- Fork/Join 框架
注意点:
- 终止条件 注意一定是 low <= high
- high 的长度为 数组.length-1
- 中点的选择
public class BinarySearch {
/**
* 二分查找
*
* @annotation 注意边界条件
* @param nums
* @param target
* @return
*/
public static int search(int[] nums, int target) {
if (nums == null)
return -1;
int high = nums.length - 1;
int low = 0;
int mid;
while (low <= high) {
mid = low + (high - low) / 2;
if (nums[mid] == target)
return mid;
if (nums[mid] > target) {
high--;
} else {
low++;
}
}
return -1;
}
public static void main(String[] args) {
System.out.println(search(new int[] { 0, 5, 8, 13, 15, 38 }, 8));
}
}
本文深入讲解了二分查找算法的基本原理及其多种变种,包括找到目标元素的首次和末次出现位置,以及首次和末次大于目标的元素位置。探讨了二分查找在Fork/Join框架中的应用,并详细阐述了实现时的注意事项,如终止条件、数组长度及中点选择等。

8774

被折叠的 条评论
为什么被折叠?



