704 二分查找

今天开始重刷题,写文章算是监督吧,希望自己能坚持下来,加油!!!

题目

给定一个 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

提示:

你可以假设 nums 中的所有元素是不重复的。

n 将在 [1, 10000]之间。

nums 的每个元素都将在 [-9999, 9999]之间。

代码

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

易错点

1、由于很久没有写java代码,在计算数组长度就出问题了,,,,用来nums.size()然后报错了

2、在while的约束条件出问题了,由于设定的end是length-1,因此为了应对数组只有一个数,while的约束条件应该是first<=end

巧妙点

1、mid=(first+end)/2,保证了序号一致性

总结

1、数组为有序数组,同时数组中无重复元素,这些都是使用二分法的前提条件,当大家看到题目描述满足如上条件的时候,可要想一想是不是可以用二分法了。

2、就是while的约束条件,end定义含义的对应。

上一篇:windows环境下Maven打成jar包添加到服务启动


下一篇:704. 二分查找