题目链接
关键词
{% label green 排序 %}、{% label yellow 双指针 %}
解析
- 先不考虑去重的问题,首先最简单的做法就是三重循环,直接暴力,就可以把所有的可能都枚举出来了,但是,这样子无疑是要超时的。
- 在暴力的基础上,考虑优化掉一重循环,因为题目要求的三数之和为0即可,所以,可以构造 双指针,也就是先固定第一个数 nums[i],然后用双指针找出 nums[j] 和 nums[k],这里假定
i < j < k
- 既然用了双指针,就需要先给 nums 排序,来给双指针创造条件
- 具体的做法是,让
j从i + 1开始,而让k从nums.length - 1开始,也就是从两边忘中间逼近的双指针
- 如果对于
nums[i] + nums[j] + nums[k] >= 0, 就可以考虑缩小[j,k]区间,具体做法,可以参考代码
- 对于去重,因为有序的特性,所以每次只需判断当前数是否和上一个的一样即可
代码
相似题目
- Author:CoderWdd
- URL:https://www.wuinsights.top//article/c34d0c64cb8d
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts