三数之和
算法-三数之和
背景
-
算法–三数之和
-
博主以代码随想录算法公开课进行学习
题目
-
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
注意: 答案中不可以包含重复的三元组。
示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]
思路
- 哈希法:俩层for循环,再用哈希法确定第3个数,但是去重难度大
- 双指针法:先将数组排序,一层for循环,i重下标为0开始,建立left指针指向i的下一位、rigth指针指向最后一位
- nums[i] + nums[left] + nums[right] > 0表示大了,right向左移
- nums[i] + nums[left] + nums[right] < 0表示小了,left向右移
- nums[i] + nums[left] + nums[right] = 0表示找到符合标准的
代码
1 | class Solution { |
总结
- 三数之和的核心逻辑是:排序 + 固定第一个数 + 双指针找后两个数,去重逻辑是避免重复三元组的关键。