手机浏览器扫描二维码访问
这题比两数之和难多了,还要去重,时间复杂度要求肯定更高。
这是去年编程竞赛的题目,听说连大四的学长都没几个人做出来。
不仅要找三个数,还要保证不重复,这对算法的要求太高了,一个大二新生怎么可能做得出来?
林星石却仿佛没听到这些议论,他的注意力完全集中在题目上。系统【思维敏捷Lv1】的双倍加成悄然发动,他只觉得大脑运转速度比平时快了一倍,各种解题思路在脑海中飞快闪过。
暴力解法?三重循环,O(n3)的时间复杂度,肯定不符合要求。
排序后双指针?先排序,然后固定一个数,用双指针找另外两个数,时间复杂度O(n2),空间复杂度O(1),这应该是比较优的解法了。
不过要注意去重,特别是在数组中有重复元素的情况下。
想到这里,林星石拿起粉笔,转身走向黑板。他的动作流畅而自信,粉笔在黑板上发出沙沙的声响。
学长们渐渐停止了议论,目光都集中在林星石身上。他们看着黑板上逐渐成型的代码框架,脸上的表情从怀疑变成了惊讶。
他居然用排序+双指针!有人小声惊呼。
这思路太清晰了,连去重的细节都考虑到了,完全不像大二学生。
林星石很快写完代码,放下粉笔,转身看向钱博士。老师,我写完了。时间复杂度O(n2),空间复杂度O(1)。排序后使用双指针,可以有效避免重复的三元组。他的声音平静,没有丝毫骄傲。
钱博士推了推眼镜,仔细检查着黑板上的代码。过了好一会儿,他才抬起头,目光中带着欣赏。思路清晰,代码简洁,完全正确。他说。
教室再次陷入寂静,紧接着爆发出一阵掌声。不过,在掌声中,也夹杂着一些不和谐的声音。
说不定是提前准备好的,一个留长发的学长小声嘟囔,哪有这么厉害的大二学生?
钱博士的目光从代码上移开,落在林星石身上,眼神里满是欣赏。这代码思路清晰,逻辑严谨,他说,尤其是排序+双指针的解法,既优化了时间复杂度,又考虑了去重的问题,非常出色。林同学,你很有天赋。