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;
        }
    }
}
相关推荐
看她闹~几秒前
javacv添加字幕 剧中显示
java·javacv·字幕
风象南1 小时前
Spring Boot 的 3 种动态 Bean 注入技巧
java·spring boot·后端
移动开发者1号1 小时前
Kotlinx序列化多平台兼容性详解
android·java·kotlin
东阳马生架构10 小时前
商品中心—6.商品考核系统的技术文档
java
晴空月明10 小时前
Java 内存模型与 Happens-Before 关系深度解析
java
皮皮林55114 小时前
SpringBoot 加载外部 Jar,实现功能按需扩展!
java·spring boot
rocksun14 小时前
认识Embabel:一个使用Java构建AI Agent的框架
java·人工智能
Java中文社群15 小时前
AI实战:一键生成数字人视频!
java·人工智能·后端
王中阳Go16 小时前
从超市收银到航空调度:贪心算法如何破解生活中的最优决策谜题?
java·后端·算法
shepherd11116 小时前
谈谈TransmittableThreadLocal实现原理和在日志收集记录系统上下文实战应用
java·后端·开源