Leetcode 15. 三数之和(2022.03.15)

103 阅读1分钟

大致思路:利用指针+排序.

但是这里面有一个难点,如何去重呢??一开始我找了找API,看看有没有去重的方法,后来一想,数组啊,空间分配固定了,没办法减少重复的元素,只能从逻辑入手了。

首先,出现重复的解原因如下:

1)哨兵位置的数据是重复的,这会导致你的工作做了两遍

2)当满足等于0的条件时,左指针或者右指针是重复的,这会导致你的移动无效。

怎么解决??

1)你要考虑哨兵后面一个元素是否与它相同,其实后面还是前面具体的看你代码怎么写,但是这个判断逻辑是一样的。

2)如果符合等式条件,那么你需要判断做左指针的右边或者右指针的左边(离它最近的元素),然后一起向中间夹。

下面我们说一下临界条件:

1) 如果你的数组为null或者数组长度<3,直接返回空数组。 2) 如果排完序之后,你的第一个元素>0直接返回。 3) 左指针<右指针

这个过程我觉得还是画图效果更好!!!!

8.png

9.png