auto commit
This commit is contained in:
@ -8,7 +8,7 @@
|
||||
<!-- GFM-TOC -->
|
||||
|
||||
|
||||
**正常实现**
|
||||
正常实现**
|
||||
|
||||
```text
|
||||
Input : [1,2,3,4,5]
|
||||
@ -33,11 +33,11 @@ public int binarySearch(int[] nums, int key) {
|
||||
}
|
||||
```
|
||||
|
||||
**时间复杂度**
|
||||
**时间复杂度**
|
||||
|
||||
二分查找也称为折半查找,每次都能将查找区间减半,这种折半特性的算法时间复杂度为 O(logN)。
|
||||
|
||||
**m 计算**
|
||||
**m 计算**
|
||||
|
||||
有两种计算中值 m 的方式:
|
||||
|
||||
@ -46,14 +46,14 @@ public int binarySearch(int[] nums, int key) {
|
||||
|
||||
l + h 可能出现加法溢出,也就是说加法的结果大于整型能够表示的范围。但是 l 和 h 都为正数,因此 h - l 不会出现加法溢出问题。所以,最好使用第二种计算法方法。
|
||||
|
||||
**未成功查找的返回值**
|
||||
**未成功查找的返回值**
|
||||
|
||||
循环退出时如果仍然没有查找到 key,那么表示查找失败。可以有两种返回值:
|
||||
|
||||
- -1:以一个错误码表示没有查找到 key
|
||||
- l:将 key 插入到 nums 中的正确位置
|
||||
|
||||
**变种**
|
||||
**变种**
|
||||
|
||||
二分查找可以有很多变种,变种实现要注意边界值的判断。例如在一个有重复元素的数组中查找 key 的最左位置的实现如下:
|
||||
|
||||
|
Reference in New Issue
Block a user