首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

算法指针算法 ( 指针算法分类 | 相向指针 | 有效回文串 )

文章目录 一、指针算法分类 二、相向指针示例 ( 有效回文串 ) 一、指针算法分类 ---- 面试时经常遇到 限制算法复杂度为 O ( n ) 的情况 , 就需要使用以下算法 : 指针算法...: 设置两个指针 ( 索引 ) , 进行不同方式的遍历 , 使用最高频的算法 ; 打擂台算法 : 设置一个擂主值 , 设置为无穷大或无穷小 , 通过遍历让该擂主值与遍历值打擂台 ; 求最大值最小值常用...; 单调栈算法 ; 单调队列算法 ; 指针算法分类 : 相向指针 : 判断一个字符串是否是回文串 , 从两边向中心遍历 ; 背向指针 : 查找一个字符串的最长回文子串使用的 " 中心线枚举算法 "...就是背向指针算法 , 从中心向两边遍历 ; ( 出现频率较 - 低 ) 同向指针 : 相向指针算法分类 : 翻转类型 : ① 翻转字符串 , ② 判断回文串 ; 两个指针分别指向收尾 , 两边往中间走...然后对比是否相等 ; 但是如果添加了上述要求 , 就需要处理大小写 , 特殊字符问题 , 有两种方案 : 创建新字符串 , 过滤掉大小写及特殊字符干扰, 然后翻转字符对比 , 这样会增加额外空间开销 ; 推荐使用指针算法

2K10

算法指针算法

二、算法原理 如果用指针从前往后遍历,就拿例1来说, 就会出现值被覆盖的情况: 所以遍历顺序就不能从前往后。...可以先用指针算法:1.先判断cur位置;2.决定dest向后移动一步或者两步;3.判断一下dest是否已经到达结束位置;4.在把cur加加。...二、算法原理 利用数组是有序的,用指针算法来算。 定义两个指针,一个在左边,一个在右边。...二、算法原理 排序之后,数据是有序的,这里就用指针算法。...这里是三个数的和,可以先固定一个数a,仅想要保证这个a是小于0就行(在后面等于0相加的值不可能等于0),然后在该数后面的区间内,利用指针算法,快速找到两个数的和,者两个数的和是a的相反数,这样这三个数相加的时候

9000
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    算法指针

    指针 指针是一种思想或一种技巧并不是特别具体的算法。具体就是用两个变量动态存储两个结点,来方便我们进行一些操作。通常用在线性的数据结构中。...特别是链表类的题目,经常需要用到两个或多个指针配合来记忆链表上的节点,完成某些操作。 常见的指针方式 •同速指针:链表上两个指针,一个先出发,另一个后出发并以相同的速度跟随。...•求链表的逆:通过临时指针指针同步前行•求链表倒数第k个元素:先让其中一个指针向前走k步,接着两个指针以同样的速度一起 向前进,直到前面的指针走到尽头了,则后面的指针即为倒数第k个元素 •快慢指针:...指针常用于线性结构:链表,数组 例题 151.反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。...输出:[1,2] 示例 2: 输入:head = [1,1,2,3,3] 输出:[1,2,3] 解题思路: •方法1:使用栈的思想,如果后面入的元素与栈顶元素相同,就略过该元素,继续遍历•方法2:指针

    35620

    基础算法--指针算法

    什么是指针算法 通常我们讲的指针就是用两个指针,两个指针可以是快慢指针,解决成环的问题,也可以是指向收尾的两个指针,来减小时间复杂度。...指针算法里的指针也不止是指针,在数组中也可以是数组元素的下标,这里指针是一种思想,并不是单单指的是指针。 接下来我们用几道例题来看看指针算法。...解法二:指针算法 首先我们先取首尾的指针,用下面的图讲解一下原理: 所以根据这个原理,向内取的话肯定是减小,所以这里我们每次肯定是小的高度进行–或者++。...解法二:指针 这里指针和上一道题的指针类似,还是需要固定一个数,这道题我们不用unordered_set进行去重,因为在算法题中可以用,但是在面试题中用unordered_set很可能会挂掉,所以我们海狮正常的用算法进行去重...解法二:指针 这里和三数取和类似,我们只需要固定第一个数,对后面的数进行三数求和,然后将第一个固定的数逐渐往后遍历即可。

    8410

    指针算法详解

    指针算法 指针算法是一种在数组或字符串中常用且高效的算法技术,它通过维护两个指针(或索引)来遍历数据结构,从而解决某些问题。...这种算法能够减少不必要的重复遍历,降低时间复杂度,并且往往能够使得代码更加简洁易懂。 根据指针的的移动方向可以分为同向指针,相向指针,快慢指针 2. 同向指针 2.1 移动零 283....复写零 如果使用指针从前往后进行维护,那么会把原来数组中的值覆盖掉,造成数据混乱,所以可以尝试采用从后往前覆盖的方法 思路:先找到最后一个复写的数,然后从后往前判断复写边界问题,如果最后一个复写的数为...盛最多水的容器 如果直接进行暴力枚举出所有组合,那么一定会超时的,通过指针可以对其进行优化 思路:先找一段区间进行分析,发现对于左右两端最小的数来说的话,继续向内模拟,无论是找到比这个数小的还是大的...四数之和 四数之和也就是在三数之和的基础上再确定一个数,需要注意的是,此时需要去重的点有:第一个确定的数和第二个确定的数,进行指针算法时的left和right class Solution {

    9610

    算法专题】指针

    指针 指针 常见的指针有两种形式,⼀种是对撞指针,⼀种是左右指针。 对撞指针:⼀般用于顺序结构中,也称左右指针。 对撞指针从两端向中间移动。...快乐数 题目链接 -> Leetcode -202.快乐数 Leetcode -202.快乐数 题目:编写一个算法来判断一个数 n 是不是快乐数。...那我们可以利用在两数之和那里用的指针思想,来对我们的暴力枚举做优化: i. 先排序; ii. 然后固定⼀个数 a : iii....在这个数后⾯的区间内,使用「指针算法」快速找到两个数之和等于 -a 即可。 但是要注意,这道题里面需要有「去重」操作: i....当使用完⼀次指针算法之后,固定的 a 也要「跳过重复」的元素 代码如下: class Solution { public: vector> threeSum

    11110

    基础算法篇——指针算法

    基础算法篇——指针算法 本次我们介绍基础算法中的指针算法,我们会从下面几个角度来介绍: 指针简介 指针基本使用 最长连续不重复字符列 数组元素的目标和 判断子序列 指针简介 首先我们先来简单介绍一下指针...: 指针算法就是采用两个变量作为指针放在数组的某个部位来实现复杂度简化 我们来介绍一下指针的使用场景: 指针通常用于简化for循环的场景,将复杂度为O(N^2)变为O(N) 指针可以用于单个序列中...,例如我们之前的快速排序所使用的指针算法 指针可以用于多个序列中,例如我们之前的归并排序所使用的指针算法 我们的指针算法通常是由for的暴力求解优化得来的: // for循环O(n^2)...里面装有一些单词,单词由空格隔开,我们需要将他们单独打出来 思路解释: /* 我们采用指针算法 i指针指向单词的第一个字母,j指向单词后面的空格,我们只需要输出i和j-1之前的字母并隔开即可 */ 算法实现...}else { System.out.println("不是子序列"); } return; } } 结束语 好的,关于基础算法篇的指针算法就介绍到这里

    25440

    算法学习|指针

    输入有序数组(https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/) 长按复制到浏览器即可到leetcode对应的题目, 算法的逻辑在具体的代码注释里...* * 思路: * 使用指针,一个指针指向值较小的元素,一个指针指向值较大的元素。 * 指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。...* 如果两个指针指向元素的和 sum == target,那么得到要求的结果; * 如果 sum > target,移动较大的元素,使 sum 变小一些; * 如果 sum < target,移动较小的元素...* 快慢指针 * 使用指针,一个指针每次移动一个节点,一个指针每次移动两个节点,如果存在环,那么这两个指针一定会相遇。...* * 通过删除字符串 s 中的一个字符能得到字符串 t,可以认为 t 是 s 的子序列, * 我们可以使用指针来判断一个字符串是否为另一个字符串的子序列。

    46930

    初识算法 · 指针(1)

    指针算法 题目一: 样例为: 输入: nums = [0,1,0,3,12] 输出: [1,3,12,0,0] 题目解析: 给定一个数组,移动0到末尾,不必考虑0的相对顺序,但是要保持非零的相对顺序。...如果不使用指针,有很多解法,比如我们可以将所有的非零元素移动到最开始,但是移动一次,就需要遍历一次,时间复杂度是接近于O(N^2)的,因为不能数组,这是一种暴力解法,那么我们如何使用指针呢?...算法原理: 通过使用指针,将数组划分为三个区域: [0,dest]划分为非零元素的区域,[dest,cur]划分为0元素的区域,[cur,end]划分为还没有遍历的区域。...既然是使用指针算法,我们自然需要定义两个“指针”,可是这里实际上不是指针,这里我们需要对指针有一个形象的认识,指针并不是真正的用指针,它们代表的只是形象的指向两个元素而已,这里的指针可是是一个数,...,就是一个变化两次,一个变化一次,当它们相等的时候,判断即可,这里也应证了指针算法并不是真的使用指针,它更多的只是一种思想而已!!

    5310

    初识算法 · 指针(4)

    前言: 本文是指针算法的最后一文,以复写零和四数之和作为结束,介绍方式同样是题目解析,算法原理,算法编写三部曲,以下是题目的链接: 1089....显然,这道题并不是通过n个循环就可以解决的,所以我们不妨直接使用指针。 到这个阶段,不妨不用思考为什么使用指针,因为目前来说算法基础并不牢靠,我们不妨积累经验。...算法原理 我们不妨模拟一下这个复写零的过程: cur指向的是原来的数组,我们假设条件就地修改这个条件不存在,我们如果是新开一块空间,过程就是两个for遍历数组,如果不是0,cur dest都++,如果是...算法原理 原理和三数之和是十分像的,我们只需要固定个数,然后找三个数和该数 - target相等,再固定一个数,找两个数,等于target - 两外两个数,这就是妥妥的指针了,根本不需要经过思考就可以动手了...指针算法也就到这里啦,后面的是滑动窗口~ 感谢阅读!

    7310

    初识算法 · 指针(2)

    有效三角形的个数 - 力扣(LeetCode) 介绍这两个题目,会从两角度进行介绍,暴力解法以及算法,整个题目的讲解分为三个部分,题目解析,算法原理,算法编写三个部分进行讲解。 现在就进入正题吧!...算法原理: 在算法原理部分,我们已经在上文了解了暴力解法,所以不再赘述暴力解法,这里是找两个数,保证下标相减 * 最小的那个数是最大值,那么找两个数,我们不妨使用指针来解决。...4种情况,是比较难控制的,如果是我们定向的让右指针从右边开始,即数组的最末端,随着右指针往左或者是左指针往右,都是下标之差减少的过程,那么我们为了找最大值,需要保证的就是两个数之间的规则了。...算法原理: 还是那句话,遇事不决先暴力。...所以我们需要另辟蹊径,那么就使用指针算法,对于指针来说,影响的是两个数,这是可是三个数,我们应该如何操作呢?

    7910

    初识算法 · 指针(3)

    前言: 本文通过介绍和为S的两数之和,以及三数之和,对指针算法进行深一步的了解,介绍该算法博主使用三部曲,第一步对题目进行分析,里面会夹杂着暴力解法的问题,第二步对于算法原理进行分析,第三步则是对算法进行编写...算法原理: 使用指针算法,对于题目中的升序,一定要利用好,我们知道: target = num1 + num2 那么既然是升序的,如果我们让两个指针,一个从开始走,一个从末尾走,也就是最大的和最小的走...所以,我们进入到算法原理方面。...算法原理 我们同样的使用指针算法,因为是指针不是三指针,所以需要我们固定一个数,用来充当target,有了第一个题目的经验,我们不妨排序一下,保证数组有序的同时有利于我们控制指针变量,排序之后对于我们去重的操作也会容易很多...排序之后,固定好target,然后进入到第二个循环,通过指针算法,找两个数,使该三个数相加等于0即可。

    9310

    【优选算法】探索指针之美(一):初识指针

    前言: 指针顾名思义就是用两个指针相互配合来解决问题的。这两个指针可以在同一个数组或链表上,也可以在不同的数据结构上。它们既可以同时移动,也可以一快一慢。...作用: 使用指针可以提高效率,在一次遍历中就可以解决问题,避免了重复遍历和不必要的计算。...解题思路: 指针算法(利用数组下标充当指针) 1. 定义两个指针 cur:从左向右扫描数组,遍历数组。 dest:已经处理的区间内,非零元素的最后一个位置。 2....(slow); fast = Sum(Sum(fast)); } return slow == 1; } }; 最后 以上三道题就是对指针算法的初步应用...,可以帮助我们初步了解并熟悉指针算法,欲知后事如何,关注我请听下回分解

    8410

    算法攻关-指针笔记

    一、题目分类 指针目前LC上涉及83道题,属于面试的一个高频范围区。我们根据标签分类是可以获取到一部分信息笔试考察范围点的。目前LC上一共是1989道题。...概率为83/1989= 4.17%. image.png 二、题目举例 链表中是否有环 查找、删除链表倒数第K个节点 最小覆盖子串 两数之和-有序数组 三数之和 最接近的三数之和 ....等 三、指针的思想...指针的思想可以归纳为: 指针很奇妙,一快一慢走。...四、解题表达式 指针公式->固定一方,变动另一方,或者双方一起同步 right = left + K; //链表倒数第K个节点类问题 while(right.next !.../固定右指针,移动左指针 if(condition2){ //处理使其满足condition1条件,并不符合condition2条件 left++; }

    50150

    leetcode 指针算法专题

    一、什么叫做指针算法?...指针是一种方法,一种思想一种技巧,也谈不上什么特别的算法,在二分查找中经常使用这个技巧,具体就是用两个变量动态的存储两个或者多个的结点,来方便我们进行一些操作,通常使用在线性结构中,比如说数组或者是链表...在我们遇到像数组,链表这类数据结构的算法题目的时候,应该要想得到指针的来解决问题。特别是链表类的题目,经常需要用到两个或多个指针配合来记忆链表上的节点,完成某些操作。...链表这种数据结构也是树形结构和图的原型,所以有时候在关于图和树形结构的算法题目中也会用到指针。...这个题目比较简单,不需要用到指针,一般在用指针的时候,需要有序数组,先排序。这题目有几种思路,首先我想到的就是利用暴力方法,直接算。看代码: 嵌套循环 -> 第二层为什么是i+1开始呢?

    54330
    领券