当前位置: 首页 > news >正文

二分查找-LeetCode

题目

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

首先,给出暴力解法

class Solution {public int search(int[] nums, int target) {for(int i = 0;i < nums.length;i++){//循环nums数组,寻找targetif(nums[i] == target){return i;//找到则返回下标,数组下标从0开始} }return -1;//退出循环仍没有返回,则说明没有找到,则返回-1}
}

其次,二分法解法[i,j)

class Solution {public int search(int[] nums, int target) {int i = 0;// 初始化变量 i 为 0,i 代表当前查找范围的左边界索引int j = nums.length;// 初始化变量 j 为数组 nums 的长度,j 代表当前查找范围的右边界索引while(i < j){// 当左边界索引 i 小于右边界索引 j 时,持续循环查找int m = (i+j) >>>1;// 计算当前查找范围的中间索引 m// 使用无符号右移运算符 >>> 进行整除操作,确保结果为整数if(target > nums[m]){i = m+1;// 则将左边界索引 i 更新为 m + 1,缩小查找范围到右半部分}else if(target < nums[m]){j = m;// 则将右边界索引 j 更新为 m,缩小查找范围到左半部分}else{return m;}}return -1;// 若循环结束仍未找到目标值,返回 -1 表示未找到}
}

[i,j]

class Solution {public int search(int[] nums, int target) {int i = 0;// 初始化变量 i 为 0,i 代表当前查找范围的左边界索引int j = nums.length-1;// 初始化变量 j 为数组 nums 的长度,j 代表当前查找范围的右边界索引while(i <= j){// 当左边界索引 i 小于等于右边界索引 j 时,持续循环查找int m = (i+j) >>>1;// 计算当前查找范围的中间索引 m// 使用无符号右移运算符 >>> 进行整除操作,确保结果为整数if(target > nums[m]){i = m+1;// 则将左边界索引 i 更新为 m + 1,缩小查找范围到右半部分}else if(target < nums[m]){j = m-1;// 则将右边界索引 j 更新为 m - 1,缩小查找范围到左半部分}else{return m;}}return -1;// 若循环结束仍未找到目标值,返回 -1 表示未找到}
}

http://www.xdnf.cn/news/4969.html

相关文章:

  • 代码学习总结(三)
  • 算法5-16 对二进制字符串解码
  • 多 Agent 协作怎么整:从谷歌A2A到多Agent交互方案实现
  • STL简介(了解)
  • 【无标题】
  • Qt核心知识总结
  • 第六章:6.3求一个3*3的整型矩阵对角线元素之和
  • ESP32-idf学习(二)esp32C3作服务端与电脑蓝牙数据交互
  • 机器学习有多少种算法?当下入门需要全部学习吗?
  • vscode+keil嵌入式软件开发全流程
  • C++笔记-list
  • 【已更新】2025华中杯C题数学建模网络挑战赛思路代码文章教学数学建模思路:就业状态分析与预测
  • 06-DevOps-自动构建Docker镜像
  • 动态规划专题5:最长上升子序列
  • LeetCode hot 100—括号生成
  • 数据中台(大数据平台)之数据质量管理
  • 3.Rust + Axum 提取器模式深度剖析
  • 【Python Cookbook】迭代器与生成器(一)
  • 【Qt】初识Qt(一)
  • Oracle 12.1.0.2补丁安装全流程
  • FPGA阵列
  • ZStack文档DevOps平台建设实践
  • 设计模式每日硬核训练 Day 14:组合模式(Composite Pattern)完整讲解与实战应用
  • 基于Django实现的图书分析大屏系统项目
  • Linux 常用命令总结
  • NLP高频面试题(四十六)——Transformer 架构中的位置编码及其演化详解
  • MCP和A2A是什么?
  • FreeRTOS事件标志组
  • 【Linux】第八章 监控和管理Linux进程
  • 关于Diamond机械手的运动学与动力学的推导