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

【⼆分查找】⼆分查找(easy)

⼆分查找(easy)

  • 题⽬描述:
  • 算法流程:
  • 算法代码:
    • C
    • JAVA
  • 时间复杂度

题⽬链接:leetcode 704.⼆分查找

题⽬描述:

给定⼀个 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
提⽰
你可以假设 nums 中的所有元素是不重复的。
n 将在 [1, 10000]之间。
nums 的每个元素都将在 [-9999, 9999]之间。

算法流程:

  1. 定义 left , right 指针,分别指向数组的左右区间。
  2. 找到待查找区间的中间点 mid ,找到之后分三种情况讨论:
    i. arr[mid] == target 说明正好找到,返回 mid 的值;
    ii. arr[mid] > target 说明 [mid, right] 这段区间都是⼤于 target 的,因此舍去右边区间,在左边[left, mid -1] 的区间继续查找,即让 right = mid - 1 ,然后重复 2 过程;
    iii. arr[mid] < target 说明 [left, mid] 这段区间的值都是⼩于 target 的,因此舍去左边区间,在右边 [mid + 1, right] 区间继续查找,即让 left = mid + 1 ,然后重复 2 过程;
  3. 当 left 与 right 错开时,说明整个区间都没有这个数,返回 -1 。

算法代码:

C

int search(int* nums, int numsSize, int target){// 初始化 left 与 right 指针int left = 0, right = numsSize - 1;// 由于两个指针相交时,当前元素还未判断,因此需要取等号while (left <= right){// 先找到区间的中间元素int mid = left + (right - left) / 2;// 分三种情况讨论if (nums[mid] == target) return mid;else if (nums[mid] > target) right = mid - 1;else left = mid + 1;}// 如果程序⾛到这⾥,说明没有找到⽬标值,返回 -1return -1;
}

JAVA

class Solution {public int search(int[] nums, int target) {int left=0,right=nums.length-1;while(left<=right){int mid=left+(right-left)/2;if(nums[mid]>target){right=mid-1;}else if(nums[mid]<target){left=mid+1;}else return mid;}return -1;}
}

在这里插入图片描述

时间复杂度

O(logN)
在这里插入图片描述

相关文章:

  • 基于cubeMX的hal库STM32实现MQ2烟雾浓度检测
  • ZLMediaKit支持JT1078实时音视频
  • 深度学习--ResNet残差神经网络解析
  • 配置 Apache 的 HTTPS
  • 四川气象数据智能体示范应用入围中国信通院“开源大模型+”案例
  • jmeter中监控服务器ServerAgent
  • ctfhub-RCE
  • 用 C++ 模拟 Axios 的 then 方法处理异步网络请求
  • 深入探究Linux项目自动化构建工具:make与Makefile
  • RK3588 Buildroot 动态变更logo
  • 【数据可视化-24】巧克力销售数据的多维度可视化分析
  • 2025.04.23【Treemap】树状图数据可视化指南
  • 量子金融工程:蒙特卡洛算法误差压缩至0.3%
  • 十大物联网平台-物联网十大品牌
  • UML2.0中的14种图简介,并借助AI生成UML图
  • Stream API 对两个 List 进行去重操作
  • Redis 详解:安装、数据类型、事务、配置、持久化、订阅/发布、主从复制、哨兵机制、缓存
  • 实现SpringBoot底层机制【Tomcat启动分析+Spring容器初始化+Tomcat 如何关联 Spring容器】
  • 【C++】13.list的模拟实现
  • docker部署seafile修改默认端口并安装配置onlyoffice实现在线编辑
  • 爱彼迎:一季度总收入约23亿美元,将拓展住宿以外的新领域
  • 3:0战胜日本队,中国羽毛球队挺进2025苏迪曼杯决赛
  • 少数人的奢侈品还是所有人的必需品:我们如何解构创造力?
  • 我国首个少数民族非遗纺织类国标正式实施
  • 取消了“仅退款”,商家就可以高枕无忧了吗?
  • 来上海喝云南咖啡!上海国际咖啡文化节助力咖啡产业破圈出海