我是靠谱客的博主 爱听歌长颈鹿,最近开发中收集的这篇文章主要介绍009.三数之和-双指针题目链接:力扣代码:大概思路:遇见的问题:个人想法:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目链接:力扣

代码:

大概思路:

01.思路

顺序:排序,a去重+失败情况,for遍历,缩小范围,找到的时候bc去重

为了方便操作,先进行升序排序(题目里有,“输出的顺序和三元组的顺序并不重要”)

排完序后,在首末节点,放置指针,代表最大值和最小值,因为是三个数,所以在最小值后面再放一个指针i,最大值指针固定,由i和最小值指针来遍历。

定义3个指针,一个在头节点,一个指向头结点的下一个位置,一个指向末尾节点。

然后头结点向后++遍历,在过程中不断判断三个指针的值加起来有没有等于0,返回等于的三个指针的下标。

同时进行不断缩小范围,三个指针的大于0,说明最大值大了,末尾节点--。(因为前面两个指针是两个最小值)

三个指针的小于0,说明最小值大了,可移动的最小值节点++。

02.注意点

1.a的去重

当头节点大于0,题目就没有等于0的可能了,因为大于0的数加更大的数也是大于0的

2.三元组去重

题目要求是没有重复的三元组,假设(0,0,0),虽然三个都是重复,只要一个变动,就可以变成一个不一样的三元组,那么去重逻辑,n[i]!=n[i+1]合适还是n[i]!=n[i-1]合适?(当两个元素相同的时候,排除这一组)

n[i]!=n[i-1]合适,比如数组[-1,-1,-1,-2]的两个(-1,-1,2)会被n[i]!=n[i+1]排除,而n[i]!=n[i-1]会排除多余的(-1,-1,2),保留一个

3.b,c的去重

b、c的去重应该放在找到一个三元组之后,不然在没找到一个三元组的时候,就给b、c去重,如果是(0,0,0,0,0,0,0),那么就会可能让right<=left,破坏循环条件。
 

遇见的问题:

好乱好乱,一写就一堆情况出来,需要再整理

个人想法:

睡了一觉起来再看,发现好像又和我想的不一样了,之前看文章的理解,是b、c不用去重,我也不知道为啥,现在发现是要去重的,那就清晰起来了,不过感觉我的逻辑都乱乱的,不简洁,有点杂糅的感觉。
 

最后

以上就是爱听歌长颈鹿为你收集整理的009.三数之和-双指针题目链接:力扣代码:大概思路:遇见的问题:个人想法:的全部内容,希望文章能够帮你解决009.三数之和-双指针题目链接:力扣代码:大概思路:遇见的问题:个人想法:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部