6.12——每日一题

三数之和:https://leetcode-cn.com/problems/3sum/

  

  这题也还是跟着题解做的。从题解中学到,找三元组且不重复的最常用的方法就是对原数组进行排序,通过排序后的数组可以很快的解决问题。

  排序后,分别对a、b、c进行遍历。当遍历a且a的值大于0,说明最小的数也大于0,不可能再有三个数的和为0,因此可以直接返回。

  当时看到排序这边以后,我只想到了用暴力进行三重遍历,时间复杂度即为n,显而易见这样时间复杂度是超过了要求。

  看题解学习了双指针,在本题中的使用如下:b和c分别从a右边的剩余数组中开始遍历,b从左往右,c从右往左。每次计算a+b+c的和,小于0的话b往左移一个非重复单位,大于0的话c往右移一个非重复单位,等于0就都往里移动,当左指针与右指针重复时停止迭代。要注意的是,外层的a右移时也要注意要移动一个非重复单位。

posted @ 2020-06-13 17:58  Mirror559  阅读(36)  评论(0)    收藏  举报