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;
        }
    }
}
相关推荐
野犬寒鸦几秒前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习
云姜.4 分钟前
java抽象类和接口
java·开发语言
带刺的坐椅5 分钟前
Claude Code Skills,Google A2A Skills,Solon AI Skills 有什么区别?
java·ai·solon·a2a·claudecode·skills
Σίσυφος190014 分钟前
PCL法向量估计 之 RANSAC 平面估计法向量
算法·机器学习·平面
爱学英语的程序员17 分钟前
面试官:你了解过哪些数据库?
java·数据库·spring boot·sql·mysql·mybatis
xhbaitxl20 分钟前
算法学习day39-动态规划
学习·算法·动态规划
I_LPL21 分钟前
day23 代码随想录算法训练营 回溯专题2
算法·hot100·回溯算法·求职面试
智者知已应修善业22 分钟前
【洛谷P9975奶牛被病毒传染最少数量推导,导出多样例】2025-2-26
c语言·c++·经验分享·笔记·算法·推荐算法
m0_7369191039 分钟前
C++中的委托构造函数
开发语言·c++·算法
小小小小王王王1 小时前
洛谷-P1886 【模板】单调队列 / 滑动窗口
c++·算法