前言
力扣上的一系列类似的题目
基本的要求就是找到一个最符合要求的三个数之和(最接近的三数之和),或者一堆符合要求的数组(三数,四数之和),基本免不了遍历整个数组
三数之和
解决思路
就和标题中的一样:排序+双指针,在一个普通遍历里面插入一轮双指针,这个解法比暴力法的时间复杂度会降一个次幂,虽然感觉并没有很大优化,但还是比没有好😂。
题解🚩
废话不多说,直接上代码(代码参考力扣大佬题解)
三数之和
这里加了排序的方法,后面两个就不写了
public class Solution {
public IList<IList<int>> ThreeSum(int[] nums) {
if(nums==null || nums.Length<3) return new List<IList<int>>();
Quick.Sort(nums); //提前排好序
int n=nums.Length;
List<IList<int>> res = new List<IList<int>>();
for(int i=0;i<=nums.Length-3;i++)
{
if(i>0 && nums[i]==nums[i-1]) continue; //重复时就跳过
int a=i+1,b=n-1; //双指针
while(a<b)
{
if(nums[i]+nums[b]+nums[a]>0) b--;
else if (nums[i]+nums[b]+nums[a]<0) a++;
else {
res.Add(new List<int>(new int[]{
nums[i],nums[a],nums[b]})); //符合条件,添加到解