题目描述
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
二分查找
又叫折半查找,需要在顺序表中进行查找。查找过程:先确定待查序列的范围,找出中间值与目标值比较,若不相等,依次减小范围,进行查找。
代码
class Solution {
public int search(int[] nums, int target) {
//确定区间范围
int low=0;
int high=nums.length-1;
while(low<=high){
//确定中间值下标,防止溢出不直接使用(low+high)/2
int middle=low+(high-low)/2;
//当目标值大于中间值,则查找区间变为[middle+1,high]
if(target>nums[middle])
low=middle+1;
//当目标值小于中间值,则查找区间变为[low,middle-1]
else if(target<nums[middle])
high=middle-1;
//当目标值等于中间值,返回中间值下标
else
return middle;
}
//未查找到,返回-1
return -1;
}
}
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/binary-search