Leetcode算法总结

双指针

应用
1.给定一个有序递增数组,在数组中找到满足条件的两个数,使得这两个数的和为某一给定的值。如果有多对数,只输出一对即可。
2.hoare的双向扫描快速划分法。
3.奇偶排序
4.求单链表的中间元素。

关键词:

  • array 类型
  • 两类元素
  • 有一定的有序性

异构指针
一般是针对 array 类型的题目。array 当中有两类元素,他们 之间 或者 各自 有某种顺序。我们维护两个 pointer,每个 pointer 负责一种一类,这样就能在保证顺序的情况下,进行某种操作。

快慢指针
快慢指针一般用于链表。为什么链表的问题,很多都要用到快慢指针呢?因为链表的 idexing 是很弱的,每次只能看到自己的 next(非常“短视”)。通过快慢指针,我们可以“之后”或者“之前”的一些元素,实际上是增加了“视野”。

递归

递归就是有去(递去)有回(归来),如下图所示。“有去”是指:递归问题必须可以分解为若干个规模较小,与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决,就像上面例子中的钥匙可以打开后面所有门上的锁一样;“有回”是指 : 这些问题的演化过程是一个从大到小,由近及远的过程,并且会有一个明确的终点(临界点),一旦到达了这个临界点,就不用再往更小、更远的地方走下去。最后,从这个临界点开始,原路返回到原点,原问题解决。

三个要素:
明确递归终止条件;
给出递归终止时的处理办法;
提取重复的逻辑,缩小问题规模。

应用场景:

  • 问题的定义是按递归定义的(Fibonacci函数,阶乘,…);
  • 问题的解法是递归的(有些问题只能使用递归方法来解决,例如,汉诺塔问题,…);
  • 数据结构是递归的(链表、树等的操作,包括树的遍历,树的深度,…)。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值