leetcode——数组类

文章目录

  • 双指针类型
  • 快慢指针
  • 二分搜索
  • 哈希表
  • 动态规划
  • 回溯算法

双指针类型

双指针是这样的模式:两个指针朝着左右方向移动(双指针分为同向双指针和异向双指针),直到他们有一个或是两个都满足某种条件。双指针通常用在排好序的数组或是链表中寻找一对数以达到:最小、最接近、最大等条件。比如,你需要去比较数组中每个元素和其他元素的关系时,你就需要用到双指针了。

识别使用双指针的招数:

  • 一般来说,数组或是链表是排好序的,你得在里头找一些组合满足某种限制条件
  • 这种组合可能是一对数,三个数,或是一个子数组

如:三数之和
以i为数组首,j为数组尾,在i与j直接寻找k能使得《满足条件》。
当k从i走到j时,说明中间已经遍历完了,然后令i右移一位,j重新回到数组尾部,继续寻找k。

快慢指针

这种模式,有一个非常出门的名字,叫龟兔赛跑。咱们肯定都知道龟兔赛跑啦。但还是再解释一下快慢指针:这种算法的两个指针的在数组上(或是链表上,序列上)的移动速度不一样。还别说,这种方法在解决有环的链表和数组时特别有用

通过控制指针不同的移动速度(比如在环形链表上),这种算法证明了他们肯定会相遇的。快的一个指针肯定会追上慢的一个(可以想象成跑道上面跑得快的人套圈跑得慢的人)。

咋知道需要用快慢指针模式勒?

  • 问题需要处理环上的问题,比如环形链表和环形数组
  • 当你需要知道链表的长度或是某个特别位置的信息的时候

那啥时候用快慢指针而不是上面的双指针呢?

有些情形下,咱们不应该用双指针,比如我们在单链表上不能往回移动的时候。一个典型的需要用到快慢指针的模式的是当你需要去判断一个链表是否是回文的时候。

一般情况下,快慢指针出现在链表的频率更高。

二分搜索

二分搜索算法模板:二分搜索算法

提到时间复杂度为O(logN)的查找就是二分搜索,数组本身就是易查找难增删的数据结构,所以二分搜索很常用,只要是提到在数组中进行搜索,都要考虑能否使用二分搜索算法。
例如:
33. 搜索旋转排序数组 难度:medium
4. 寻找两个有序数组的中位数 难度:hard
34. 在排序数组中查找元素的第一个和最后一个位置 难度:medium
74. 搜索二维矩阵 难度:medium

哈希表

动态规划

如:盛最多水的容器

回溯算法

你可能感兴趣的:(LeetCode)