算法模块方法总结(数组)

二分查找(Binary Search)

二分查找(Binary Search)是一种在有序数组(必须是不能重复的,因为如果有重复的,会从几个符合的选项中输出一个,可能不合题意)中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。

二分查找的思想是便于理解的,但是边界条件是很容易写错的。

比如下面的

while(left<=right)
while(left<right)

那么到底要不要加这个等于号取决于要找的目标数在怎样的一个区间当中,当他处于一个左闭右闭的区间时,这个时候的等于就是有意义的

大致可以写出下面的模板代码

int middle =left+(right-left)/2);
//或者写成
int middle =left+(right-left)>>1);
if(nums[middle]>target){right--;
}
if(nums[middle]<target){left++;
}
if(nums[middle]==target){return middle;
}

 双指针法(Two-Pointer Technique)

双指针法通常被用于数组和链表当中,他更是可以通过一个for循环完成两个for循环的工作,其中在链表当中用处更大。

我们通过一个例题来体会

一个数组[4,5,6,4,4,4]原地移除元素4,并不使用其他空间。

int slowIndex=0;
for(int fastIndex=0;fastIndex<nums.length;fastIndex++){
//如果不是目标数,两个都++,将两个指针都指向下一个待检测元素
//如果是目标数就跳过去,但是此时的慢指针指向目标数,快指针在它前面一位。会直接覆盖掉目标值。if(val!=nums[fastIndex]){nums[slowIndex++]=nums[fastIndex];
//这一步进行覆盖工作。}return slowIndex;
}

滑动窗口

滑动窗口通常用于寻找数组中满足和的最小子数组,或者给定子数组大小,和一些属性去寻找位置。其实是双指针的变形,不过形象上更像一个窗口的移动。

我们以寻找数组中满足和的最小子数组为例来看看

int sum =0;
int i=0;
int length =Integer.MAX_VALUE;
for(int j=0;j<nums.length;j++){sum+=nums[j];if(sum>=target){int len=j-i+1;length=Math.min(len,length);
//当满足要求进行更新了以后,开始滑动窗口,左指针右移,找下一个符合条件的子数组
//直到最后遍历完成之后,就会找到一个最小的子数组i++sum-=nums[i];}
}

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

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

相关文章

低成本复刻AI代理产品 - 优化方案概览

1、精简技术框架与理念升级 构建一个轻量级且高效的个人AI助手应用,集成了最新AI技术,旨在成为每位用户的“智慧副驾”,不仅管理个人知识库,还能实时互联全球信息,实现智能化信息检索与决策辅助。 2、精准定位与价值主张 定位为“个人智识力倍增器”,超越传统知识管理…

Day48 Javascript详解

Day48 Javascript详解 文章目录 Day48 Javascript详解一、什么是javascript二、javascript特点三、 Javascript的历史四、Javascript vs Java五、JS的基本数据类型六、JS基本数据类型的特殊点七、数组 一、什么是javascript JavaScript是一种高级的、解释型的编程语言&#xf…

发送http请求时,以form-data的格式作为requests的参数

1、使用requests的requests_toolbelt模块 &#xff0c;需要自行安装。 pip3 install requests-toolbelt from requests_toolbelt import MultipartEncoder import requestsm MultipartEncoder(fields{field0: value,field1: value,field2: (文件名称, open(文件地址/file.py…

cmake编译redis6.0源码总结

1配置clion使用cygwin模拟linux环境&#xff0c;先下载cygwin后配置 2导入源码&#xff0c;配置cmake文件 由于redis是基于Linux上的Makefile&#xff0c;所以Windows上需要配置CMakeLists.txt使用cmake工具编译运行。github上已经有人尝试编写CMakeLists.txt文件&#xff0c…

MCF-Microbial Cell Factories

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、投稿咨询 一、期刊简介 Microbial Cell Factories 是一份开放的同行评审期刊&#xff0c;涵盖了与微生物细胞作为重组蛋白和天然产物的生产者或作为工业兴趣的生物转化的催化剂的开发、使用和研究相关的任何主题…

《Electron实战:入门、进阶与性能优化》目录汇总

前言 很早之前想学习的技术了&#xff0c;主要是可以用框架优化界面&#xff0c;嘿嘿(▽) 目录 认识Electron轻松入门主进程和渲染进程引入现代前端框架窗口界面数据系统通信硬件跳槽从安全发布自媒体内部发布工具 后记 持续更新

【学习笔记】Windows GDI绘图(四)矩阵Matrix详解

矩阵Matrix 基于矩阵在GDI绘图的重要性&#xff0c;所以想深入了学习矩阵的相关属性与方法。 先上个本文中所有的函数图例演示吧。 原型&#xff1a; namespace System.Drawing.Drawing2D;public sealed unsafe class Matrix : MarshalByRefObject, IDisposableMatrix类封装…

系统架构师-考试-基础题-错题集锦2

108.总线-全双工、半双工&#xff1a; 109.软件配置管理-产品配置&#xff1a; 产品配置&#xff1a;指一个产品在其生命周期各个阶段所产生的各种形式和各种版本的文档、计算机程序、部件及数据的集合。 注意&#xff1a;选项中的需求规格说明、设计说明等均可归属于文档。 …

Netty学习02----使用多线程优化Selector

背景前置 在单线程环境下&#xff0c;使用一个线程同时绑定多个事件&#xff1a;连接事件、读事件、写事件。不能充分发挥多核CPU的优势&#xff0c;考虑使用多个线程&#xff0c;每个线程专门负责处理不同的事件&#xff0c;如下图所示&#xff1a;一个线程专门负责连接&#…

“在线全文”“在线发表”的区别

在线全文&#xff1a;在网上可以看到全文,&#xff08;但不一定能检索到&#xff0c;有的时候&#xff0c;文章在网上可以搜到全文&#xff0c;但是不能被WOS期刊收录&#xff0c;不能出具检索证明&#xff09; 在线发表&#xff1a;在线发表一般是能检索到的。

【ARK Survival Evolved】方舟:生存进化一键使用服务器开服联机教程

1、进入控制面板 2、第一次购买服务器会安装游戏端&#xff0c;大约5分钟左右&#xff0c;如果长时间处于安装状态请联系客服 3、设置游戏端口 方舟生存进化的设置需要三个端口&#xff0c;它们用于游戏端口&#xff08;必须为首选端口&#xff09;&#xff0c;查询端口&#…

uniapp中使用mockjs模拟接口测试总结(swiper轮播图示例)

完整总结下在uni-app中如何使用Mock.js模拟接口测试&#xff0c;这在后台接口未就绪的情况下非常有用。同时也给出个首页swiper轮播图的mock接口使用。网上的文章都不太完整&#xff0c;这里总结下完整的使用示例&#xff0c;同时也支持h5和小程序平台&#xff0c;分享给需要的…

webpack5 splitChunks分割代码

首先明确webpack 自身的打包行为 当splitChunks为false时&#xff0c;此时不启用任何打包设置 可以看到&#xff0c;静态引入全都打到一个chunk里&#xff0c;动态引入会拆分出来一个chunk,这是纯webpack无配置的打包&#xff0c; webpack会给每个模块打上标记 ,如下 { m…

Python使用multiprocessing实现多进程

大家好&#xff0c;当我们工作中涉及到处理大量数据、并行计算或并发任务时&#xff0c;Python的multiprocessing模块是一个强大而实用的工具。通过它&#xff0c;我们可以轻松地利用多核处理器的优势&#xff0c;将任务分配给多个进程并同时执行&#xff0c;从而提高程序的性能…

基于transformers框架实践Bert系列3-单选题

本系列用于Bert模型实践实际场景&#xff0c;分别包括分类器、命名实体识别、选择题、文本摘要等等。&#xff08;关于Bert的结构和详细这里就不做讲解&#xff0c;但了解Bert的基本结构是做实践的基础&#xff0c;因此看本系列之前&#xff0c;最好了解一下transformers和Bert…

【MySQL】窗口函数实现滑动平均计算,数据清洗缺失值填补均值

路过了学校花店 荒野到海边 有一种浪漫的爱 是浪费时间 徘徊到繁华世界 才发现你背影 平凡得特别 绕过了城外边界 还是没告别 爱错过了太久 反而错得完美无缺 幸福兜了一个圈 &#x1f3b5; 林宥嘉《兜圈》 在数据分析和处理过程中&#xff0c;常常需要对一系列时间序列数据进行…

【JavaEE】加法计算器与用户登录实战演练

目录 综合练习加法计算器1. 准备工作2. 约定前后端交互接口3. 服务器代码 用户登录1. 准备工作2. 约定前后端交互接口3. 服务器代码4. 调整前端页面代码 综合练习 理解前后端交互过程接⼝传参, 数据返回, 以及⻚⾯展⽰ 加法计算器 需求: 输⼊两个整数, 点击"点击相加&q…

56. UE5 RPG 给敌人添加AI实现跟随玩家

在这一篇里&#xff0c;我们要实现一下敌人的AI&#xff0c;敌人也需要一系列的行为&#xff0c;比如朝向英雄攻击&#xff0c;移动&#xff0c;在满足条件时施放技能。这些敌人的行为可以通过使用UE的内置的AI系统去实现。 在UE里&#xff0c;只要是基于Character类创建的蓝图…

安卓绕过限制直接使用Android/data无需授权,支持安卓14(部分)

大家都知道&#xff0c;安卓每次更新都会给权限划分的更细、收的更紧。   早在安卓11的时候还可以直接通过授权Android/data来实现操作其他软件的目录&#xff0c;没有之前安卓11授权的图了&#xff0c;反正都长一个样&#xff0c;就直接贴新图了。   后面到了安卓12~13的…

AWS安全性身份和合规性之IAM Identity Center(AWS Single Sign-On)

AWS IAM Identity Center&#xff0c;又称为AWS Single Sign-On&#xff08;SSO&#xff09;&#xff0c;是一项AWS托管的身份验证服务&#xff0c;用于集中管理多个AWS账户和SaaS应用程序的用户身份验证和授权。 单点登录&#xff08;SSO&#xff09;是一种身份验证解决方案&…