当前位置: 首页 > news >正文

算法之双指针

双指针算法的作用

双指针算法是一种使用2个变量对线性结构(逻辑线性/物理线性),进行操作的算法,双指针可以对线性结构进行时间复杂度优化,可以对空间进行记忆或达到某种目的

双指针算法的分类

1.快慢指针

2.滑动窗口

3.左右指针

4.前后指针

双指针OJ题目

Leetcode.27.移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 

使用左右指针,一个指向左值,一个指向右值。

Leetcode.15.三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

排序+双指针(前后指针),排序用来剪枝。

通过i遍历整个数组,得到第一个数,left,right得到其他2个数,因为数组被排序后,只要sum大于0,则right--,若小于0,则left++,对比暴力算法,双指针减少了一次遍历,降低了时间复杂度。

Leetcode.209.长度最小子数组

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度如果不存在符合条件的子数组,返回 0 。

滑动窗口

Leetcode.151.反转字符串

给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

前后指针,左右指针,整体反转,局部反转,去除重复空格。

http://www.lryc.cn/news/228669.html

相关文章:

  • Redis被攻击纪实
  • AI工具-PPT-SlidesAI
  • 原型链污染攻击
  • Android Glide transform圆形图CircleCrop动态代码描边绘制外框线并rotateImage旋转,Kotlin
  • 【ruoyi】微服务关闭登录验证码
  • AI:78-基于深度学习的食物识别与营养分析
  • 日本it培训班,如何选择靠谱的赴日IT培训班?
  • 51单片机PCF8591数字电压表LCD1602液晶显示设计( proteus仿真+程序+设计报告+讲解视频)
  • 缅因州政府通知130万人MOVEit数据泄露事件
  • 4.2 onnx简化模型结构
  • 通用的链栈实现(C++)
  • 物联网AI MicroPython学习之语法 bluetooth蓝牙
  • React中的key有什么作用?
  • 初认识vue,v-for,v-if,v-bind,v-model,v-html等指令
  • Java 算法篇-深入了解单链表的反转(实现:用 5 种方式来具体实现)
  • Android 10.0 系统内存优化之修改dalvik虚拟机的内存参数
  • Docker+K8s基础(重要知识点总结)
  • IDEA 关闭SpringBoot启动Logo/图标
  • 提供话费充值接口 话费快充慢充/API独立接口,商城/小程序/公众号合作
  • [N-133]基于springboot,vue小说网站
  • 计算机网络:概述
  • 服务号怎么升级订阅号
  • 11.读取文件长度-fseek和ftell函数的使用
  • 视觉大模型DINOv2:自我监督学习的新领域
  • Java事务详解
  • el-table实现展开当前行时收起上一行的功能
  • Go的优雅退出
  • 【KVM-6】KVM/QEMU软件栈
  • 硬件知识2
  • 【Java 进阶篇】JQuery DOM操作:通用属性操作的绝妙魔法