当前位置: 首页 > 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实现在线编辑
  • 吉林建筑大学党委原书记崔征接受纪律审查和监察调查
  • 养胃不是顿顿喝粥,这份“胃的使用说明书”请收好
  • 国家发改委:将开展市场准入壁垒清理整治行动
  • 金发科技去年净利增160%,机器人等新领域催生材料新需求
  • 35部国产佳片入选 ,北影节·第32届大学生电影节启动
  • 41岁知名学者陈昊因病骤然离世,北大再发讣告缅怀