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;
        }
    }
}
相关推荐
wclass-zhengge9 分钟前
04树 + 堆 + 优先队列 + 图(D4_图(D1_基础学习))
数据结构·算法
kim_puppy9 分钟前
树的基本概念,并查集复习(学习记录)
c语言·数据结构·学习·算法
飞翔的佩奇14 分钟前
Java项目: 基于SpringBoot+mybatis+maven+mysql实现的健身房管理系统(含源码+数据库+毕业论文)
java·数据库·spring boot·mysql·vue·毕业设计·健身房
跳动的梦想家h15 分钟前
java虚拟机JVM简单介绍(可用于面试)
java·jvm·面试
夜夜夜ye4 小时前
服务端渲染技术
java·servlet
南棱笑笑生5 小时前
20250204在Ubuntu22.04下配置荣品的RK3566开发板的Android13的编译环境
java·开发语言
java1234_小锋6 小时前
Mybatis是如何进行分页的?
java·开发语言
查理零世6 小时前
【算法】动态规划专题④ ——LCS(最长公共子序列)+ LPS(最长回文子序列) python
python·算法·动态规划
zm6 小时前
C基础寒假练习(6)
数据结构·算法
Tisfy7 小时前
LeetCode 0598.区间加法 II:最小值
算法·leetcode·题解·思维