编程语言
首页 > 编程语言> > LeetCode 704.二分查找【Java解题】

LeetCode 704.二分查找【Java解题】

作者:互联网

文章目录


1.题目

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

提示:

2.解题思路

在有序的数组(nums)中利用二分法查找目标值(target)

3.Java代码

class Solution {
    public int search(int[] nums, int target) {
        
        int left=0;
        int right=nums.length-1;
        

        while(left<=right){
            //int mid=(left+right)/2;
            //将第一行注释是因为这样写有点问题,当left和right值过大时,两者之和会溢出。
            int mid=left+(right-left)/2;//建议使用这个
            if(target==nums[mid])
            return mid;
            else if(target>nums[mid])
            left=mid+1;
            else//此处的条件是(target<nums[mid])
            right=mid-1;
        }
        return -1;//表示target不在nums中


    }
}

4. 二分法回顾

  1. 二分法又叫折半查找。
  2. 该方法常用来查找数组中的某个元素。使用二分法的前提是该数组有序
  3. 使用
    1)先定义两个变量:left、right,使mid=left+(right-left)/2。
    2)若目标值target==nums[mid],则查找的值刚好与中间值相等。
    3)若目标值target>nums[mid],则查找的值大于中间值,需要往数组中间值的较大端查找,此时使left=mid+1。
    4)若目标值target<nums[mid],则查找的值小于中间值,需要往数组中间值的较小端查找,此时使right=mid-1。

标签:right,Java,target,nums,704,mid,int,LeetCode,left
来源: https://blog.csdn.net/qq_52111135/article/details/120680545