给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
public class Solution {
public IList<IList<int>> ThreeSum(int[] nums) {
Array.Sort(nums);
IList<IList<int>> res = new List<IList<int>>();
for (int i = 0; i < nums.Length; i++)
{
if (i>0&&nums[i]==nums[i-1])
{
continue;
}
int targetSum = -(nums[i]);
int startIndex = i + 1;
int endIndex = nums.Length - 1;
while (startIndex<endIndex)
{
int sumOfValueStartAndEndIndex = nums[startIndex] + nums[endIndex];
if (sumOfValueStartAndEndIndex==targetSum)
{
res.Add(new int[] { nums[i], nums[startIndex], nums[endIndex] });
while (startIndex<endIndex&&nums[startIndex]==nums[startIndex+1])
{
startIndex++;
}
while (startIndex<endIndex&&nums[endIndex]==nums[endIndex-1])
{
endIndex--;
}
startIndex++;
endIndex--;
}
else
{
if (sumOfValueStartAndEndIndex<targetSum)
{
startIndex++;
}
else
{
endIndex--;
}
}
}
}
return res;
}
}