实验楼三楼的走廊有些寂静,林星石踩着楼梯台阶,记忆里计协活动室的位置逐渐清晰。他走到302教室门口,门虚掩着,透过缝隙能看到里面几张熟悉的面孔——几个学长正围在桌前,对着电脑屏幕讨论着什么。
林星石深吸一口气,轻轻推开门。金属门轴发出细微的声响,里面的讨论声戛然而止,几道目光齐刷刷地看过来。
学长们好,他站在门口,嘴角扬起礼貌的笑,我是计算机系大二学生林星石,想来加入计算机协会。
教室中央,一个穿着格子衬衫的男生从椅子上站起来,脸上带着惊讶但很快转为热情。他是副会长张磊,在计协也算小有名气。
欢迎欢迎,张磊快步走过来,伸手拍了拍林星石的肩膀,我们计协就需要新鲜血液。来,我给你介绍下,这几位是协会的骨干成员,那边是我们的指导老师钱博士的位置,他平时会来指导我们做项目。
林星石目光扫过教室,墙上贴着几张编程竞赛的奖状,角落的书架上摆满了计算机相关的书籍。他收回目光,看向张磊:我暑假自学了C++和数据结构,一直想找个地方和大家交流学习,提升自己的编程水平。
张磊眼睛一亮,正准备开口说些什么,教室门突然被推开。一个戴着眼镜、穿着白衬衫的中年男人走了进来,手里还拿着几本书。他是钱博士,计协的指导老师,也是学校里颇受欢迎的编程课讲师。
钱博士的目光在教室里扫了一圈,最后落在林星石身上。这位是?他问张磊。
钱老师,他是来加入计协的新生,叫林星石。张磊连忙介绍。
钱博士推了推眼镜,走到林星石面前,上下打量了他一番。计算机系的?他问。
是的,大二。林星石点头。
暑假自学了C++和数据结构?钱博士的声音里带着一丝审视。
林星石愣了一下,随即反应过来,应该是张磊刚才的话被钱博士听到了。他如实点头:嗯,看了些教材,也做了些练习题。
钱博士笑了笑,随手拿起桌上的粉笔,在黑板上写下一行字:给定一个整数数组,找出所有满足条件的三元组[a,b,c],使得a+b+c=0,且a≤b≤c。要求不重复且时间复杂度尽可能优化。写完,他转身看向林星石:如果你能解出这道题,我就同意你加入计协。
钱博士的题目像一块石头扔进平静的湖面,激起阵阵涟漪。几个学长凑到黑板前,小声议论起来。
这题比两数之和难多了,还要去重,时间复杂度要求肯定更高。
这是去年编程竞赛的题目,听说连大四的学长都没几个人做出来。
不仅要找三个数,还要保证不重复,这对算法的要求太高了,一个大二新生怎么可能做得出来?
林星石却仿佛没听到这些议论,他的注意力完全集中在题目上。系统【思维敏捷Lv1】的双倍加成悄然发动,他只觉得大脑运转速度比平时快了一倍,各种解题思路在脑海中飞快闪过。
暴力解法?三重循环,O(n3)的时间复杂度,肯定不符合要求。
排序后双指针?先排序,然后固定一个数,用双指针找另外两个数,时间复杂度O(n2),空间复杂度O(1),这应该是比较优的解法了。
不过要注意去重,特别是在数组中有重复元素的情况下。
想到这里,林星石拿起粉笔,转身走向黑板。他的动作流畅而自信,粉笔在黑板上发出沙沙的声响。
学长们渐渐停止了议论,目光都集中在林星石身上。他们看着黑板上逐渐成型的代码框架,脸上的表情从怀疑变成了惊讶。
他居然用排序+双指针!有人小声惊呼。
这思路太清晰了,连去重的细节都考虑到了,完全不像大二学生。
林星石很快写完代码,放下粉笔,转身看向钱博士。老师,我写完了。时间复杂度O(n2),空间复杂度O(1)。排序后使用双指针,可以有效避免重复的三元组。他的声音平静,没有丝毫骄傲。
钱博士推了推眼镜,仔细检查着黑板上的代码。过了好一会儿,他才抬起头,目光中带着欣赏。思路清晰,代码简洁,完全正确。他说。
教室再次陷入寂静,紧接着爆发出一阵掌声。不过,在掌声中,也夹杂着一些不和谐的声音。
说不定是提前准备好的,一个留长发的学长小声嘟囔,哪有这么厉害的大二学生?
钱博士的目光从代码上移开,落在林星石身上,眼神里满是欣赏。这代码思路清晰,逻辑严谨,他说,尤其是排序+双指针的解法,既优化了时间复杂度,又考虑了去重的问题,非常出色。林同学,你很有天赋。
钱博士的话像一颗定心丸,让教室里的议论声小了下去。但那个留长发的学长却依然不服气,他站了起来,指着黑板上的代码说:我还是不相信一个大二学生能这么快写出正确的代码,说不定是抄袭的!
小主,这个章节后面还有哦,请点击下一页继续阅读,后面更精彩!
喜欢软件教父:从大学社团开始制霸请大家收藏:(m.zuiaixs.net)软件教父:从大学社团开始制霸醉爱小说网更新速度全网最快。