[Algorithm][二分查找][山峰数组的峰顶索引][寻找峰值][寻找旋转排序数组中的最小值][0~n-1中缺失的数字]详细讲解

目录

  • 1.山脉数组的峰顶索引
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 2.寻找峰值
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 3.寻找旋转排序数组中的最小值
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 4.0〜n-1 中缺失的数字
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现


1.山脉数组的峰顶索引

1.题目链接

  • 山脉数组的峰顶索引

2.算法原理详解

  • 数据虽然不是严格有序,但是仍具有二段性,可以用二分查找
    • 本题可以印证:即使数据无序,只要符合二段性,就可以使用二分查找
      请添加图片描述

3.代码实现

int PeakIndexInMountainArray(vector<int>& arr) 
{int left = 1, right = arr.size() - 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;
}

2.寻找峰值

1.题目链接

  • 寻找峰值

2.算法原理详解

  • 本题虽然在数据上,是明显的无序,但是仍然可以找到二段性的存在,可以使用二分查找

    • 本题可以印证:即使数据无序,只要符合二段性,就可以使用二分查找
      请添加图片描述
  • 任取⼀个点mid,与下⼀个点mid + 1,会有如下两种情况:

    • arr[mid] > arr[mid + 1]
      • 此时「左侧区域」⼀定会存在⼭峰(因为最左侧是负⽆穷),那么可以去左侧去寻找结果
    • arr[mid] < arr[mid + 1]
      • 此时「右侧区域」⼀定会存在⼭峰(因为最右侧是负⽆穷),那么可以去右侧去寻找结果
        请添加图片描述

3.代码实现

int FindPeakElement(vector<int>& nums) 
{int left = 0, right = nums.size() - 1;while(left < right){int mid = left + (right - left) / 2;if(nums[mid] > nums[mid + 1]){right = mid;}else{left = mid + 1;}}return left;
}

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

1.题目链接

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

2.算法原理详解

  • 二分的本质:找到一个判断标准,使得查找区间能够一分为二
  • 通过图像可以发现,[A,B]区间内的点都严格> D点的值,C点的值严格< D点的值
    • 但是当[C,D]区间只有⼀个元素的时候, C点的值可能= D点的值
      请添加图片描述

3.代码实现

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

4.0〜n-1 中缺失的数字

1.题目链接

  • 0〜n-1 中缺失的数字

2.算法原理详解

  • 本题的二段性算是比较逆天的,可以借此拓展对二段性的理解
  • 在这个升序的数组中:
    • 在第⼀个缺失位置的左边,数组内的元素都是与数组的下标相等
    • 在第⼀个缺失位置的右边,数组内的元素与数组下标是不相等
  • 因此,可以利⽤这个**「⼆段性」,来使⽤「⼆分查找」**算法
    请添加图片描述

3.代码实现

int takeAttendance(vector<int>& records) 
{int left = 0, right = records.size() - 1;while(left < right){int mid = left + (right - left) / 2;if(mid == records[mid]){left = mid + 1;}else{right = mid;}}return left == records[left] ? (left + 1) : left; // 处理边界情况
}

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

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

相关文章

智慧安防边缘计算硬件AI智能分析网关V4算法启停的操作步骤

TSINGSEE青犀视频智能分析网关V4内置了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为等实时检测分析&#xff0c;上报识别结果&#xff0c;并能进行语音告警播放。硬件管理平台支持RTSP、GB28181协议、以及厂家私有协议接入&#xff0c;可兼容市面上常…

山与路远程控制 一个基于electron和golang实现的远控软件

山与路远程控制 &#x1f3a5;项目演示地址 还在制作… ♻️项目基本介绍 山与路远程控制是基于electron(vue3)和golang实现的远程控制软件(项目界面主要模仿向日葵远程软件,如有侵权请告知),代码可能有点臃肿毕竟只花了一周左右写的无聊项目,如果对其感兴趣的大佬可以fork自…

鸿蒙开发实例:【配置OpenHarmony SDK】

配置OpenHarmony SDK 在设置OpenHarmony应用开发环境时&#xff0c;需要开发者在DevEco Studio中配置对应的SDK信息。 说明&#xff1a; 请注意&#xff0c;OpenHarmony SDK版本精简了部分工具链&#xff0c;因此不适用于HarmonyOS应用开发。 前提条件 已下载并安装好DevEco …

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之四 简单行人人体检测效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之四 简单行人人体检测效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之四 简单行人人体检测效果 一、简单介绍 二、简单行人人体检测效果实现原理 三、简…

网络安全数字孪生:一种新颖的汽车软件解决方案

摘要 随着汽车行业转变为数据驱动的业务&#xff0c;软件在车辆的开发和维护中发挥了核心作用。随着软件数量的增加&#xff0c;相应的网络安全风险、责任和监管也随之增加&#xff0c;传统方法变得不再适用于这类任务。相应的结果是整车厂和供应商都在努力应对汽车软件日益增加…

论文解读:(VPT)Visual Prompt Tuning

文章汇总 要解决的问题 大型模型应用于下游任务本身就存在挑战。最明显的(通常也是最有效的)适应策略是对预先训练好的模型进行全面的端到端微调。 动机 只微调参数的一个子集 解决的办法 只在输入空间中引入少量特定于任务的可学习参数&#xff0c;而在下游训练期间冻结…

visionTransformer window平台下报错

错误&#xff1a; KeyError: Transformer/encoderblock_0/MlpBlock_3/Dense_0kernel is not a file in the archive解决方法&#xff1a; 修改这个函数即可&#xff0c;主要原因是Linux系统与window系统路径分隔符不一样导致 def load_from(self, weights, n_block):ROOT f&…

idea文件菜单打不开,pom一直在加载。有些项目一直在加载。从文件打开,d盘进不去。

idea文件菜单打不开&#xff0c;pom一直在加载。有些项目一直在加载。从文件打开&#xff0c;d盘进不去。 在这里会有红色感叹号&#xff0c;进入吧插件禁止启用。就ok。我这里miniapp插件坏了。重启就行。

使用Go语言和chromedp库下载Instagram图片:简易指南

摘要/导言 本文将介绍如何使用Go语言配合chromedp库来下载Instagram上的图片。我们将通过一个简单的示例来展示整个过程&#xff0c;包括如何设置爬虫代理IP以绕过网络限制。 背景/引言 在数据采集和自动化测试领域&#xff0c;Go语言以其出色的执行效率、简洁的语法和卓越的…

Topaz Photo AI 3.0.0 (macOS Universal) - AI 图片修复工具

Topaz Photo AI 3.0.0 (macOS Universal) - AI 图片修复工具 Maximize Image Quality with AI 请访问原文链接&#xff1a;Topaz Photo AI 3.0.0 (macOS Universal) - AI 图片修复工具&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sy…

Django模型的属性与方法

本节介绍Django模型的属性和方法&#xff0c;以及如何重写之前定义的模型方法等内容。 3.5.1 模型属性 Django模型中最重要的属性就是Manager&#xff0c;它是Django模型和数据库查询操作之间的接口&#xff0c;并且被用作从数据库当中获取实例的途径。如果Django模型中没有…

AI视频分析技术的常用开源模型及TSINGSEE青犀AI视频识别分析能力介绍

AI视频分析技术是指利用人工智能技术来对视频数据进行分析和处理的技术。开源模型是指可以免费获取和使用的代码模型&#xff0c;可以帮助开发人员快速构建和部署AI视频分析应用程序。 以下是一些业内常用的用于AI视频分析技术的开源模型&#xff1a; OpenCV&#xff1a;Open…