题目链接
题目:
分析:
- 如果按照从头到尾的顺序一次比较, 每次只能舍弃一个元素, 效率是非常低的, 而且没有用到题目的要求, 数组是有序的
- 因为数组是有序的, 所以如果我们随便找到一个位置, 和目标元素进行比较, 如果大于目标元素, 说明该位置的右侧元素都比目标元素大, 都可以舍去, 同理, 比目标元素小可以舍去左边的元素, 具有"二段性"
- 通过概率计算, 当我们选中间元素时, 时间复杂度最好, 引出"二分查找"算法
代码:
class Solution {
public int search(int[] nums, int target) {
int left = 0;
int right = nums.length-1;
while(left <= right){
int mid = left + (right-left)/2;//防溢出
if(nums[mid] > target){
right = mid - 1;
}else if(nums[mid] < target){
left = mid + 1;
}else{
return mid;
}
}
return -1;
}
}