前言
本文介绍了 LeetCode 第 15 题 , “3Sum”, 也就是 “三数之和” 的问题.
本文使用 C# 语言完成题目,介绍了2种方法供大家参考。
题目
English
LeetCode 15. 3Sum
Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note:
The solution set must not contain duplicate triplets.
Example:
Given array nums = [-1, 0, 1, 2, -1, -4],
A solution set is:
[
[-1, 0, 1],
[-1, -1, 2]
]
中文
LeetCode 15. 三数之和
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
注意:
答案中不可以包含重复的三元组。
示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
解决方案
看到题目,三层循环的暴力法就出现在脑海,但是提交后会报超时,并且这也不是我们要的结果,我们需要的是通过题目来找寻方法,而不是仅仅将题目给解决。下文将介绍两种方法供读者参考。
第一种方法 是 双指针法。
第二种方法 是 哈希表法。
方法一:双指针法
若一组解为 (x,y,z) , 则该方法是先确定x,然后使用双指针同时寻找y和z。首先我们对nums进行排序,然后取第一个