二分查找
二分查找
题目解析:在一个有序数组中找一个 target,找到返回其下标,找不到返回 -1 算法原理:1. 暴力解法:遍历整个数组进行查找时间复杂度 O(N);2. 朴素二分算法:我们可以发现其数组是可以根据一个值将其分为两部分并且可以比较然后舍弃一部分,此时这个数组具有'二段性',因此可以使用二分算法。
class Solution {
public int search(int[] nums, int target) {
// 此时就用 left 和 right 两个变量在左右两边
// 使用 mid 来表示其中间的下标,因为其有序
// 这样我们每次比较一次其就会干掉一半的数这个效率是很高的
int left = 0;
int right = nums.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2; // 防溢出
if (target > nums[mid]) {
// 在 [mid+1 , right]
left = mid + 1;
} else if (target < nums[mid]) {
// 在 [left,mid - 1]
right = mid - 1;
} else {
return mid;
}
}
return -1;
}
}
时间复杂度:O(log N) 空间复杂度:O(1)


