算法专题三:二分算法

二分法

  • 零.二分查找
    • 1.思路一:朴素二分
  • 一.在排序数组中第一个和最后一个数:
    • 1.思路一:
    • GIF题目解析
  • 二.算法X的平方根:
    • 1.思路一:暴力+哈希
    • 2.思路二:二分区间
    • GIF题目解析
  • 三.搜索插入位置:
    • 1.思路一:
    • GIF题目解析
  • 四:山脉数组的峰顶索引:
    • 1.思路一:
    • GIF题目解析
  • 五:寻找峰值:
    • 1.思路一:
    • GIF题目解析
  • 六:寻找旋转排序数组中的最小值
    • 1.思路一:
    • GIF题目解析
  • 七:0~~n-1中缺少的数字(点名):
    • 1.思路一:
    • GIF题目解析

零.二分查找

在这里插入图片描述
二分查找

1.思路一:朴素二分

在这里插入图片描述

class Solution {
public:int search(vector<int>& nums, int target) {int left=0;int right = nums.size()-1;while(left<=right){int mid = (left+right)/2;//1.nums[mid] > targetif(nums[mid]>target)right = mid-1;//2.nums[mid] < targetelse if(nums[mid]<target)left = mid+1;//3.nums[mid] == targetelsereturn mid;}return -1;}
};

一.在排序数组中第一个和最后一个数:

1.思路一:

在这里插入图片描述

特殊情况:
在这里插入图片描述

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {int left = 0;int right = nums.size()-1;//处理边界情况if(nums.size() == 0)return {-1,-1};//1.确定左端点:while(left<right){int mid = left + (right-left)/2;if(nums[mid] < target) left = mid+1;else if(nums[mid] >= target) right = mid;}if(nums[left]!=target) return {-1,-1};int begin = left;//2.确定右端点:left=0,right=nums.size()-1;while(left<right){int mid = left+(right-mid+1)/2;if(nums[mid] <= target) left = mid;else if(nums[mid] > target) right = mid-1;}int end = left;return {begin,end};}
};

GIF题目解析

找左端点:
在这里插入图片描述

找右端点:

在这里插入图片描述

二.算法X的平方根:

在这里插入图片描述
X的平方根

1.思路一:暴力+哈希

在这里插入图片描述

2.思路二:二分区间

在这里插入图片描述

class Solution {
public:int mySqrt(int x) {if(x==0)return 0;long long  left = 1;long long  right = x;while(left<right){long long  mid = left + (right - left + 1)/2;if((mid*mid) <= x) left = mid;else right = mid -1;}return left;}
};

GIF题目解析

在这里插入图片描述

三.搜索插入位置:

在这里插入图片描述
搜索插入位置

1.思路一:

在这里插入图片描述
在这里插入图片描述

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

GIF题目解析

在这里插入图片描述

四:山脉数组的峰顶索引:

在这里插入图片描述

山脉数组的峰顶索引

1.思路一:

在这里插入图片描述

class Solution {
public:int peakIndexInMountainArray(vector<int>& arr) {int left=0,right=arr.size()-1;while(left<right){int mid = left + (right-left +1)/2;if(arr[mid-1] < arr[mid]) left=mid;else right = mid -1;}return left;}
};

GIF题目解析

在这里插入图片描述

五:寻找峰值:

在这里插入图片描述

寻找峰值

1.思路一:

在这里插入图片描述

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

GIF题目解析

在这里插入图片描述

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

在这里插入图片描述

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

1.思路一:

在这里插入图片描述

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

GIF题目解析

在这里插入图片描述

七:0~~n-1中缺少的数字(点名):

在这里插入图片描述
点名

1.思路一:

在这里插入图片描述

class Solution {
public: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;}if(records[left] == left)return left+1;return left;}
};

GIF题目解析

在这里插入图片描述

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

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

相关文章

中国防风固沙量数据

中国防风固沙量数据 防风固沙是生态系统&#xff08;如森林、草地等&#xff09;通过其结构与过程减少由于风蚀所导致的土壤侵蚀的作用&#xff0c;是生态系统提供的重要调节服务之一。防风固沙功能主要与风速、降雨、温度、土壤、地形和植被等因素密切相关。以防风固沙量&…

21 Vue3中使用v-for遍历对象数组

概述 使用v-for遍历对象数组在真实的开发中也属于非常常见的用法&#xff0c;需要重点掌握。 因为目前流行的是前后端分离开发&#xff0c;在前后端分离开发中&#xff0c;最常需要处理的就是对象数组类型的数据了。 比如&#xff0c;将员工信息渲染到表格中。 这节课我们就…

3d max高质量渲染时,硬件的要求有什么?

渲染过程中&#xff0c;想要追求&#xff0c;效果图高质量渲染&#xff0c;高效率渲染的过程中&#xff0c;3d max高清渲染不只是三维软件的一个要求&#xff0c;对于本地计算机的硬件要求配置也是很重要的。 今天&#xff0c;小编带大家来聊聊3d max高质量渲染过程中&#xff…

solidity 重入漏洞

目录 1. 重入漏洞的原理 2. 重入漏洞的场景 2.1 msg.sender.call 转账 2.2 修饰器中调用地址可控的函数 1. 重入漏洞的原理 重入漏洞产生的条件&#xff1a; 合约之间可以进行相互间的外部调用 恶意合约 B 调用了合约 A 中的 public funcA 函数&#xff0c;在函数 funcA…

使用 Node.js 删除文件 - 完整步骤教程

引言 在 Node.js 中处理文件尤其是移除文件&#xff0c;对于维护高效应用程序至关重要。储存和秩序当道的今天&#xff0c;删除不必要或冗余的文件能力显得尤为关键。本文深入探讨你会想要使用这个强大功能的时刻和原因&#xff0c;并通过各种案例展示了这个概念&#xff0c;同…

【C#】.net core 6.0 通过依赖注入注册和使用上下文服务

给自己一个目标&#xff0c;然后坚持一段时间&#xff0c;总会有收获和感悟&#xff01; 请求上下文是指在 Web 应用程序中处理请求时&#xff0c;包含有关当前请求的各种信息的对象。这些信息包括请求的头部、身体、查询字符串、路由数据、用户身份验证信息以及其他与请求相关…

案例系列:营销模型_客户细分_无监督聚类

案例系列&#xff1a;营销模型_客户细分_无监督聚类 import numpy as np # 线性代数库 import pandas as pd # 数据处理库&#xff0c;CSV文件的输入输出&#xff08;例如pd.read_csv&#xff09;/kaggle/input/customer-personality-analysis/marketing_campaign.csv在这个项…

KoPA: Making Large Language Models Perform Better in Knowledge Graph Completion

本来这个论文用来组会讲的&#xff0c;但是冲突了&#xff0c;没怎么讲&#xff0c;记录一下供以后学习。 创新点 按照我的理解简单概述一下这篇论文的创新点 提出使用大模型补全知识图谱&#xff0c;并且融合知识图谱的结构信息提出一个新的模型KoPA模型&#xff0c;采用少…

JavaCV音视频开发宝典:UDP局域网组播推流,多播推流,局域网多网段推流,使用UDP方式推送TS组播流,实现UDP一对多组播

《JavaCV音视频开发宝典》专栏目录导航 《JavaCV音视频开发宝典》专栏介绍和目录 ​ 前言 在之前文章中我们已经实现rtp点到点传输JavaCV音视频开发宝典:rtp点到点音视频传输(一对一音视频直播)和rtp广播JavaCV音视频开发宝典:rtp广播方式发送TS流音视频传输(一对多音视…

Linux宝塔面板本地部署Discuz论坛发布到公网访问【无需公网IP】

文章目录 前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛 前言 Crossday Discuz! Board&#xff08;以下简称 Discuz!&#xff09;是一套通用的社区论坛软件系统&#xff0c;用户可以在不需要任何编程的基础上&a…

uni-app学习记录

uni-app官网学习记录 uni-app注意点记录 页面跳转注意事项 navigateTo, redirectTo 只能打开非 tabBar 页面。switchTab 只能打开 tabBar 页面。reLaunch 可以打开任意页面。不能在首页 onReady 之前进行页面跳转。 页面通讯 // 发起页面uni.$emit(update,{msg:页面更新})//…

软件设计模式:六大设计原则

文章目录 前言一、开闭原则二、里氏替换原则三、依赖倒转原则四、接口隔离五、迪米特法则六、合成复用原则总结 前言 在软件开发中&#xff0c;为了提高软件系统的可维护性和可复用性&#xff0c;增加软件的可扩展性和灵活性&#xff0c;程序员要尽量根据6条原则来开发程序&am…

Postman调用HTTPS需要配置

1、配置—Settings 2、General—SSL cert…&#xff1a;改成OFF 3、添加请求IP 欢迎大家阅读&#xff0c;本人见识有限&#xff0c;写的博客难免有错误或者疏忽的地方&#xff0c;还望各位大佬指点&#xff0c;在此表示感谢。觉得本文章有帮助到的&#xff0c;点个赞呗

项目进度管理:掌握进度管理技巧,保障项目不延期

项目进度问题通常在小型团队中并不显著&#xff0c;因为这类团队通常人数较少&#xff0c;成员间的沟通成本相对较低。这使得他们在执行项目时更加团结和协作。 然而&#xff0c;当团队规模扩大到上百人时&#xff0c;这使得沟通变得更为复杂&#xff0c;在这个庞大的团队中&…

JAVA线上事故:递归导致的OOM

最近因为人员离职&#xff0c;接手一个项目&#xff0c;是xxljob的客户端&#xff0c;部署在k8s上&#xff0c;在排查线上工单时&#xff0c;发现了一个问题&#xff1a; 在管理界面上&#xff0c;我惊讶的发现&#xff0c;三个月的时间&#xff0c;2个Pod&#xff0c;每个都重…

debian10安装配置vim+gtags

sudo apt install global gtags --version gtags //生成gtag gtags-cscope //查看gtags gtags与leaderf配合使用 参考: 【VIM】【LeaderF】【Gtags】打造全定制化的IDE开发环境&#xff01; - 知乎

以ACM32F403为主控的车载电动尾门案例分析

方案概述 随着汽车行业智能化、电气化、网联化大潮的发展&#xff0c;电动后尾门逐渐普及化。此方案兼容多种人机交互接口&#xff0c;包括传统的按键开关&#xff0c;也包括智能脚踢传感器&#xff0c;远程手机控制等智能控制技术&#xff0c;支持防夹算法&#xff0c;支持全锁…

Apache+PHP环境配置 手动配置

准备工作&#xff0c;在G盘新建一个WAMP目录 1.获取Apache 打开下载地址Apache VS17 binaries and modules download&#xff0c;下载 httpd-2.4.58-win64-VS17.zip 将下载好的httpd-2.4.58-win64-VS17.zip拷贝到G:\WAMP目录下并解压到当前目录&#xff0c;得到Apache24目录 …

u盘加密软件合辑丨u盘怎么上锁某个文件夹

毫无疑问&#xff0c;U盘是我们生活中最常使用的移动储存设备&#xff0c;常见的U盘普遍没有使用限制&#xff0c;任何人都可以浏览其中的数据&#xff0c;这就可能导致数据泄密和隐私泄露&#xff0c;那么普通U盘怎么变成加密U盘呢&#xff1f; 一、上锁某个U盘文件夹 可以将…

Vue3+Echarts:堆积柱状图的绘制

一、需求 在Vue3项目中&#xff0c;想用Echarts来绘制堆积柱状图&#xff0c;去展示最近一周APP在不同渠道的登录人数效果如下&#xff1a; 二、实现 (关于Echarts的下载安装以及图表的样式设计&#xff0c;此处不展开&#xff01;) 1、Templates部分 <template>&l…