leetcode/notes/src/three_sum.md

1005 B
Raw Blame History

三数相加

Leetcode 15. 3Sum

这是一道典型的双指针 + 排序的题目。

如果暴力枚举的话时间复杂度是 O(n^3) ,我们考虑用双指针来遍历。

双指针可以将 O(n^2) 的时间复杂度降到 O(n),如果这道题用了双指针的话可以将时间复杂度降到 O(n^2) 。

思路很简单,首先对数组从小到大排序,然后 for i from 0 to end ,这是第一重循环

然后在 [i+1, end] 这个区间里,定义一个 left 从左往右,和一个 right 从右往左。

终止条件是它们相遇,或者三数相加满足题目条件。

当三数之和小于 0 时left 往右移;

当三数之和大于 0 时right 往左移。


Leetcode 18. 4Sum

和三数相加差不多,只不过我们把 for i from 0 to end 这个循环改成了双重循环

for i from 0 to end
    for j from i+1 to end

其它都一样。时间复杂度 O(n^3)