【练习】二分查找思想

  • 🎥 个人主页:Dikz12
  • 🔥个人专栏:算法(Java)
  • 📕格言:吾愚多不敏,而愿加学
  • 欢迎大家👍点赞✍评论⭐收藏

目录

二分查找算法介绍 

1.二分查找

题目描述 

讲解 

​编辑

代码实现

2.在排序数组中查找元素的第一个和最后一位置

题目描述

​编辑 题解

​编辑 

代码实现

模版总结

3.山脉数组的峰顶索引 

题目描述 

题解 

代码实现 

 4.点名

 题目描述

题解  

代码实现

5.寻找旋转排序数组中的最小值

题目描述 

题解 

代码实现


二分查找算法介绍 

二分查找的使用并不是单单在数组有序的情况下,而是数据能否划分成两段,是否满足“二段性” ;也是细节最多,最容易写出死循环的算法;时间复杂度O(logN),写法模版大致可以分为:

  1. 朴素的二分查找(局限性)
  2. 查找左边界
  3. 查找右边界

写法就在题的里面讲述.

1.二分查找

题目描述 

讲解 

 解法:采用最朴素的二分查找.

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

代码实现

    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) {left = mid + 1;}else if(nums[mid] > target) {right = mid - 1;}else{return mid;}}return -1;}

2.在排序数组中查找元素的第一个和最后一位置

题目描述

 题解

 解法:采用查找区间的左端点 和 查找区间的右端点.

1.查找区间左端点.

2. 查找区间右端点

 

代码实现

   public int[] searchRange(int[] nums, int target) {int[] ret = new int[2];ret[0] = ret[1] = -1;if(nums.length == 0) {return ret;}//查找左端点int left = 0,right = nums.length - 1;while(left < right) {int mid = left + (right - left) / 2;if(nums[mid] < target) {left = mid + 1;}else {right = mid;}}if(nums[left] != target) {return ret;}else{ret[0] = right;}//查找右端点// left = 0;right = nums.length - 1;while(left < right) {int mid = left + (right - left + 1) / 2;if(nums[mid] <= target) {left = mid;}else {right = mid - 1;}}if(nums[left] != target) {return ret;}else {ret[1] = left;}return ret;}

模版总结

3.山脉数组的峰顶索引 

题目描述 

​​​​​​

题解 

 

代码实现 

    public int peakIndexInMountainArray(int[] arr) {// 删去第一个和最后一个int left = 1,right =arr.length - 2;while(left < right) {int mid = left + (right - left + 1) / 2;if(arr[mid] > arr[mid - 1]) {left = mid;}else {right = mid - 1;}}return left;}

 4.点名

 题目描述

题解  

解一:暴力解法(直接查询)

解二:借助哈希容器

解三:位运算

解四:高斯求和(数学公式)

解五:二分法

代码实现

    public int takeAttendance(int[] records) {int left = 0,right = records.length - 1;while(left < right) {int mid = left + (right - left) / 2;if(records[mid] == mid) {left = mid + 1;}else{right =mid;}}if(records[left] == left) {return left + 1;}return left;}

5.寻找旋转排序数组中的最小值

题目描述 

题解 

代码实现

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/66.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32应用开发——BH1750光照传感器详解

STM32应用开发——BH1750光照传感器详解 目录 STM32应用开发——BH1750光照传感器详解前言1 硬件介绍1.1 BH1750简介1.2 硬件接线 2 软件编程2.1 软件原理2.1.1 IIC设备地址2.1.2 IIC读写2.1.3 BH1750指令集2.1.4 BH1750工作流程2.1.5 BH1750测量模式 2.2 测试代码2.3 运行测试…

【剪映专业版】10时间线工具:主轨磁吸、自动吸附、联动、预览轴、全局缩放预览

视频课程&#xff1a;B站有知公开课【剪映电脑版教程】 主轨&#xff1a;有封面标志的轨道才是主轨。 主轨磁吸&#xff1a;开启后&#xff0c;在主轨上移动素材&#xff0c;自动向前磁吸&#xff0c;在其他轨道上移动无此效果&#xff1b;关闭后&#xff0c;不自动向前磁吸&…

6个步骤轻松实现Postman接口压力测试(建议收藏)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号&#xff1a;互联网杂货铺&#xff0c;回复1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 这里讲是postman做接口并发测试&#xff0c;基础用法不做…

这些年背过的面试题--MySQL篇

MySQL一直是面试中的热点问题&#xff0c;也难道了很多的面试者。其实MySQL没那么难&#xff0c;只是大家没有系统化、实战性的过去学习、总结。同时很多开发者在实际的开发过程中也很少去接触一些偏向底层的知识。 本手册&#xff0c;已总结成完整的PDF文档。想获取该文档&am…

opencv的cmake报错

opencv编译报错 CMakeDownloadLog.txt #use_cache "D:/opencv/.cache" #do_unpack "ippicv_2021.8_win_intel64_20230330_general.zip" "71e4f58de939f0348ec7fb58ffb17dbf" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/1…

遇事不决 量子力学?

文章目录 引入量子力学产生的必然性量子力学名称的由来粒子&#xff1f;波&#xff1f;波粒二象性测不准原理 &#xff08;不确定原理&#xff09;叠加态原理 量子纠缠态叠加量子纠缠量子纠缠实验 逻辑判断&#xff0c;量子力学到底完善吗观测量子纠缠&#xff1f;那我们宏观世…

快慢指针的应用

快慢指针的原理 快慢指针是利用两个指针移动速度的不一样&#xff0c;实现一些有趣的追击行为。就像上学时求解的那些操场上的追击问题一样。 问题1&#xff1a;判断两个链表是否相交。&#xff08;链表不存在环结构&#xff09; 形如&#xff1a; 方法&#xff1a;循环第一…

谷歌开源专业代码模型:对硬件要求低,性能超强!

谷歌发布了面向企业、开发人员的全新代码模型Code Gemma&#xff0c;一共有基础预训练、指令微调和快速推理三个版本。 Code Gemma是基于谷歌在今年2月发布的Gemma模型之上开发而成。其参数很小只有20亿和70亿两种&#xff0c;但使用了超过5000亿tokens的代码、数学、文本等数…

vue2和vue3的v-if与v-for优先级对比

Vue.js 中使用最多的两个指令就是 v-if 和 v-for&#xff0c;因此我们可能会想要同时使用它们。虽然官方不建议这样做&#xff0c;但有时确实是必须的&#xff0c;我们来了解下他们的工作方式&#xff1a; 在 vue 2.x 中&#xff0c;在一个元素上同时使用 v-if 和 v-for 时&am…

【第七届openGauss技术文章征集】 openGauss新版本征文活动来啦!

活动背景 2024年3月30日&#xff0c;openGauss 6.0.0版本正式上线&#xff0c;该版本与之前版本特性功能保持兼容&#xff0c;在内核能力、DataPod三层资源池化架构、DataKit数据全生命周期管理平台、生态兼容性等方面全面增强。&#xff08;下方【点击原文】即可查看更多【新…

【GPT-4最新研究】GPT-4与科学探索:揭秘语言模型在科学领域的无限可能

各位朋友们&#xff0c;你们知道吗&#xff1f;自然语言处理领域最近取得了巨大的突破&#xff01;大型语言模型&#xff08;LLM&#xff09;的出现&#xff0c;简直就像打开了新世界的大门。它们不仅在语言理解、生成和翻译方面表现出色&#xff0c;还能涉足许多其他领域&…

【绘图案例-屏幕截图 Objective-C语言】

一、屏幕截图 1.接下来,我们来说这个屏幕截图, 1.看一下我们的ppt, 屏幕截图呢,核心代码,也就是一句话, 我们看ppt上说,有时候需要从屏幕上的某一个View啊,截取一个图片出来,然后呢,这个里边儿,它举的一个例子,就是这个东西,捕鱼达人的这个图片,实际上,屏幕截图…

突破界限:LangChain 引领 AI 应用构建的新时代

前言 在上一篇文章中我们对 ChatWithPDF 的方案设计进行了整体的概览&#xff0c;现在细化下整体流程&#xff0c;如下图所示&#xff1a; 针对上面的流程&#xff0c;我们思考&#x1f914;一下会面临的问题&#xff1a; 如何读取 PDF 中的内容&#xff1f;&#xff08;肯定…

一些重新开始面试之后的八股文汇总

一、内存中各项名词说明 1、机器内存概念说明 linux中的free命令可以查看机器的内存使用情况&#xff0c;vmstat命令也可以 其中不容易被理解的是&#xff1a; 内存缓冲/存数&#xff08;buffer/cached&#xff09; 1.buffers和cache也是RAM划分出来的一部分地址空间 2.buff…

如何利用逻辑引擎的对象变量节点优化表单数据处理?

JVS逻辑引擎-对象变量节点 概述 对象变量是面向对象编程中的一个重要概念。在编程中&#xff0c;对象变量用于存储对象的引用。在Java中&#xff0c;使用“类名变量名”可以创建一个对象变量&#xff0c;但此时对象变量本身并没有任何值。要赋予对象变量具体的值&#xff0c;…

Type-C接口PD取电IC6500

一、引言 随着科技的不断进步&#xff0c;移动设备已经成为我们日常生活中不可或缺的一部分。其中&#xff0c;电源管理对于确保设备的稳定运行和延长电池寿命至关重要。Type-C接口作为现代移动设备的主要电源和数据接口&#xff0c;其高效、便捷的特性得到了广泛应用。而Powe…

基于springboot实现音乐网站管理系统项目【项目源码+论文说明】计算机毕业设计

基于SpringBoot实现音乐网站管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了音乐网站的开发全过程。通过分析音乐网站管理的不足&#xff0c;创建了一个计算机管理音乐网站的方案。文章介绍了音乐…

李彦宏:开源模型会越来越落后

李彦宏&#xff1a;开源模型会越来越落后 昨天听完的李总讲座 大家以前用开源觉得开源便宜&#xff0c;其实在大模型场景下&#xff0c;开源是最贵的。所以&#xff0c;开源模型会越来越落后。 ——李彦宏 至于开源还是闭源&#xff0c;这和企业的利益息息相关。 随着科技的迅猛…

新品上市|水深测量专家 HD-680双变频测深仪

自动跟踪 一键测量 测深参数自动调节&#xff0c;换能器内置温度传感器&#xff0c;声速自动解算&#xff0c;提升数据精度&#xff0c;解放双手&#xff0c;提高测量效率。 高低频结合可实时显示淤泥厚度 HD-680双变频测深仪高低频双通道同时工作&#xff0c;全新升级的双频测…

如何使用WinSCP通过固定公网TCP地址实现远程连接内网设备传输文件

文章目录 1. 简介2. 软件下载安装&#xff1a;3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 ​ Winscp是一个支持SSH(Secure SHell)的可视化SCP(Secure Copy)文件传输软件&#xff0c;它的主要功能是在本地与远程计…