二分查找

题目:   给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

 

示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1

 

解题思路:

在本题中,因为二分查找,所以需要划分范围,每个范围的边界值无法判断,,所以一开始就要比较两个边界值,即

if(nums[0]==target){ return 0; }

if(nums[nums.length-1]==target){ return nums.length-1; }

计算中间值

比较中间值与查找值的大小选定区间,

使中间值成为一个边界值。

 

直到某个进行比较的边界值与所查找的值相等,返回下角坐标

或者寻找不到对应值,等待循环结束返回-1

 

寻找循环时要注意循环次数,例如

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4

此数列循环次数多于nums.length / 2 所以,循环次数为nums.length

此题代码为

class Solution {
    public int search(int[] nums, int target) {
    int x=nums.length-1,y=0,z=0,n=0;;
    if(nums[0]==target){
        return 0;
    }
    if(nums[x]==target){
        return x;
    }
    while(n<x){
        z=(x+y)/2;
        if(nums[z]>target){
            x=z;
        }else if(nums[z]<target){
            y=z;
        }else{
            return z;
        }
        n++;
    }
    return -1;
    }
}

 

posted @ 2021-12-29 11:16  zgc是只仓鼠  阅读(34)  评论(0)    收藏  举报