Skip to main content
左右指针

左右指针

一、概念

所谓左右指针,就是两个指针相向而行或者相背而行;而所谓快慢指针,就是两个指针同向而行,一快一慢。

左右指针在我们算法中使用是非常广泛的,一般解决问题包括但是不仅限于两数之和类问题,翻转数组,双指针问题又可以进行细分为,滑动窗口,二分查找等具体的技巧。但是滑动窗口,二分查找,已经开始自立门派,自成体系了。

二、经典题目

15. 三数之和


Y-aong...About 3 min算法笔记左右指针双指针
快慢指针

快慢指针

一、概念

什么叫做快慢指针呢?就是两指针都是从头开始,一起向某个方向移动,这个在链表中使用更加多,但是在数组中用到的也是非常多的,这一类题目基本上有个比较明显的特征,就是原地修改数组,比如原地去重,原地修改,当我们遇到这些关键字就需要注意了我们需要用到快慢指针。

关于使用快慢指针还有一点比较重要,就是快指针代表着什么,慢指针表示着什么,当它们相遇时我们需要做什么。

基本上就是统一的思路

  • 快指针:表示我们要遍历的元素信息
  • 慢指针:表示我们要维护元素

Y-aong...About 4 min算法笔记快慢指针双指针
1、二分搜索个人总结

1、二分搜索个人总结

一、二分查找定义

二分查找的基本思想是很简单的可能很多小学生都可以思考出来,但是实际去 写又会遇到很多问题。因为里面有很多细节需要注意。一不小心就会写失败。

二分查找的基本算法思想为:通过确定目标元素所在的区间范围,反复将查找范围减半,直到找到元素或找不到该元素为止。

二、二分查找的算法步骤

  1. 初始化:首先,确定要查找的有序数据集合。可以是一个数组或列表,确保其中的元素按照升序或者降序排列。
  2. 确定查找范围:将整个有序数组集合的查找范围确定为整个数组范围区间,即左边界 left 和右边界 right。
  3. 计算中间元素:根据 mid=⌊(left+right)/2⌋ 计算出中间元素下标位置 mid
  4. 比较中间元素:将目标元素target 与中间元素 nums[mid]进行比较:
    • target == nums[mid]找到目标索引
    • target < nums[mid]目标位置在[left, mid-1], right=mid-1
    • target > nums[mid]目标位置在[mid+1, right],left=mid+1

Y-aong...About 9 min算法笔记左右指针双指针
1、顺子问题

1、顺子问题

659. 分割数组为连续子序列

给你一个按 非递减顺序 排列的整数数组 nums

请你判断是否能在将 nums 分割成 一个或多个子序列 的同时满足下述 两个 条件:


Y-aong...About 4 min算法笔记贪心顺子问题双指针
4、贪心双指针问题

4、贪心双指针问题

605. 种花问题——种花问题

假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。

给你一个整数数组 flowerbed 表示花坛,由若干 01 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false


Y-aong...About 6 min算法算法贪心算法双指针
5、回文子串

5、回文子串

一、定义

回文字符串

  • 是正着读和倒过来读一样的字符串。
  • 和奇数数量有关
  • 倒叙挺好用的
  • 双指针和动态规划是一般的解题方法

二、验证回文串

125 验证回文串

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串


Y-aong...About 7 min算法回文子串动态规划双指针
6、矩形路径

6、矩形路径

62. 不同路径——基础类型

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?

示例 1:


Y-aong...About 7 min算法算法矩形面积动态规划双指针