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

文章目录

  • 1.题目
  • 2.解题思路
  • 3.Java代码
  • 4. 二分法回顾


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

提示:

  • 你可以假设 nums 中的所有元素是不重复的。
  • 将在 [1, 10000]之间。
  • nums 的每个元素都将在 [-9999, 9999]之间。

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
            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

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/rotate-array

你可能感兴趣的:(LeetCode,java,leetcode,算法)