Leetcode704_二分查找

1.leetcode原题链接:. - 力扣(LeetCode)

2.题目描述

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

提示:

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

3.实现方法

方法一

java 复制代码
class Solution {
   public int search(int[] nums, int target) { 
      int n=nums.length;
      // 定义初始查找范围,双指针
      int l=0;
      int r=n-1;

      if(nums[l]>target || nums[r]<target) return -1;

      while(l<=r){
          int mid=(l+r)/2;
          if(nums[mid]<target){
              l=mid+1;
          }else if(nums[mid]>target){
              r=mid-1;
          }else{
              return mid;
          }
      }

      return -1;
    }
}

方法二:递归

java 复制代码
class Solution {
   public int search(int[] nums, int target) { 
       return recursiveMethod(nums,target,0,nums.length-1); 
    }

     //方法二: 递归方法 ,增加搜索的上下界作为参数
    private int recursiveMethod(int[] nums,int target,int l,int r){
        //基本判断,当起始位置大于结束位置时,直接返回-1 ;特殊情况超出最大最小值,直接返回-1
        if(l>r || nums[l]>target || nums[r]<target) return -1;

        //计算中间位置
        int mid=(l+r)/2;

        //判断中间位置元素和target的大小关系,更改搜索范围,递归调用
        if(nums[mid]< target){
            return recursiveMethod(nums,target,mid+1,r);
        }else if(nums[mid]>target){
            return recursiveMethod(nums,target,l,mid-1);
        }else{
            return mid;
        }
    }
}
相关推荐
O***Z6165 分钟前
【语义分割】12个主流算法架构介绍、数据集推荐、总结、挑战和未来发展
算法·架构
4***W4298 分钟前
SpringCloud实战十三:Gateway之 Spring Cloud Gateway 动态路由
java·spring cloud·gateway
程序员-周李斌10 分钟前
ArrayList 源码深度分析(基于 JDK 8)
java·开发语言·数据结构·算法·list
safestar201211 分钟前
Spring Boot的魔法与陷阱:从自动配置原理到生产环境避坑实战
java·spring boot·后端
高洁0112 分钟前
具身智能-视觉语言导航(VLN)(3
深度学习·神经网络·算法·aigc·transformer
v***553413 分钟前
Spring Boot环境配置
java·spring boot·后端
达不溜先生 ୧⍢⃝୨13 分钟前
循环赛日程表问题
c语言·算法·递归·分治·循环赛日程表·动态二维数组
J***516813 分钟前
Spring Cloud GateWay搭建
java
IT·小灰灰15 分钟前
深度解析重排序AI模型:基于硅基流动API调用多语言重排序AI实战指南
java·大数据·javascript·人工智能·python·数据挖掘·php
一辉ComeOn16 分钟前
【大数据高并发核心场景实战】 数据持久化层 - 分表分库
java·大数据·分布式·mysql·系统架构