算法技巧——双指针算法
前置知识
C 和 C++ 的数组、指针。
什么是双指针
严格的来说,双指针只能说是是算法中的一种技巧。
双指针指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。
双指针问题套路
通俗的说,就是在数组遍历中,我们使用两个指针进行操作。所以双指针问题基本有以下几个细节:
1、双指针的初始位置。根据双指针的分类,有两种可能。具体看下面的介绍。
2、双指针的移动方法。根据双指针的分类,有两种可能。具体看下面的介绍。
3、遍历的结束条件。根据双指针的分类,有两种可能。具体看下面的介绍。
对撞指针
对撞指针是指在数组中,将指向最左侧的索引定义为左指针(left)
,最右侧的定义为右指针(right)
,然后从两头向中间进行数组遍历。快速排序就是典型的双指针问题。
我们假设数组名字为 nums,数组长度为 n,数组首元素对应的位置为 0。
代码细节
指针初始位置
左指针(left)一般指向数组的第一个元素。即 left = 0。
右指针(right)一般指向数组的第一个元素。即 right = n-1。
指针移动方法
算法 系列博客 [算法]刷题范围建议 和 代码规范 [算法]复杂度理论 ( 时间复杂度 ) [字符串]最长回文子串 ( 蛮力算法 ) [字符串]最长回文子串 ( 中心线枚举算法 ) [字符串]最长回文 ... 文章目录 一.双指针算法分类 二.相向双指针示例 ( 有效回文串 ) 一.双指针算法分类 面试时经常遇到 限制算法复杂度为 O(n)O ( n )O(n) 的情况 , 就需要使用以下算法 : 双指针算 ... 目录 1. 设计findcontentchildren(greedy, size)来判断出饼干可以满足多少小孩: 2. 设计carpooling(trips, capacity)判断是否一个车能接送所 ... 算法 系列博客 [算法]刷题范围建议 和 代码规范 [算法]复杂度理论 ( 时间复杂度 ) [字符串]最长回文子串 ( 蛮力算法 ) [字符串]最长回文子串 ( 中心线枚举算法 ) [字符串]最长回文 ... 题目描述 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 初始化 nums1 和 nums2 的元素数量分别为 m 和 ... 原文作者:huansky 原文地址:双指针算法基本原理和实践 什么是双指针 双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的 ... 一.什么是双指针算法? 严格的来说,双指针只能说是是算法中的一种技巧. 双指针指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进 ... 对于算法技巧,之前的文章也写过一些算法技巧,不过相对零散一些,今天我把之前的很多文章总结了下,并且通过增删查改,给大家总结一些常用的算法解题技巧,当然,这些也不是多牛逼的技巧,不过可以让你的代码看起来 ... 文章目录 题目分析 题目来源 题目分析 来源:acwing ac代码1:双指针算法 读入两个字符串a和b,用两个指针i和j分别遍历a.b.如果a[i] ==b[j],说明键盘没坏,j往后移动一个:如果 ...左指针(left)向右边
算法技巧——双指针算法相关推荐
最新文章
热门文章