友情支持
如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜
有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。
公众号的微信号是: jikerizhi 。因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。 |
Two Pointer 双指针
双指针是这样的模式:两个指针朝着左右方向移动(双指针分为同向双指针和异向双指针),直到他们有一个或是两个都满足某种条件。双指针通常用在排好序的数组或是链表中寻找对子。比如,你需要去比较数组中每个元素和其他元素的关系时,你就需要用到双指针了。
我们需要双指针的原因是:如果你只用一个指针的话,你得来回跑才能在数组中找到你需要的答案。这一个指针来来回回的过程就很耗时和浪费空间了 — 这是考虑算法的复杂度分析的时候的重要概念。虽然brute force一个指针的解法可能会奏效,但时间复杂度一般会是O(n²)。在很多情况下,双指针能帮助我们找到空间或是时间复杂度更低的解。
识别使用双指针的招数:
-
一般来说,数组或是链表是排好序的,你得在里头找一些组合满足某种限制条件
-
这种组合可能是一对数,三个数,或是一个子数组
经典题目
-
[1455-check-if-a-word-occurs-as-a-prefix-of-any-word-in-a-sentence]
-
[1498-number-of-subsequences-that-satisfy-the-given-sum-condition]
-
[1577-number-of-ways-where-square-of-number-is-equal-to-product-of-two-numbers]
-
[1764-form-array-by-concatenating-subarrays-of-another-array]
-
[1850-minimum-adjacent-swaps-to-reach-the-kth-smallest-number]
-
[2035-partition-array-into-two-arrays-to-minimize-sum-difference]
-
[2046-sort-linked-list-already-sorted-using-absolute-values]
-
[2441-largest-positive-integer-that-exists-with-its-negative]
-
[2472-maximum-number-of-non-overlapping-palindrome-substrings]
-
[3239-minimum-number-of-flips-to-make-binary-grid-palindromic-i]
-
[3240-minimum-number-of-flips-to-make-binary-grid-palindromic-ii]
-
[3400-maximum-number-of-matching-indices-after-right-shifts]
-
[3403-find-the-lexicographically-largest-string-from-the-box-i]
-
[3406-find-the-lexicographically-largest-string-from-the-box-ii]