首页 > 其他分享 >三数之和

三数之和

时间:2022-09-20 18:35:03浏览次数:41  
标签:third nums int 三数 枚举 second first

题目:

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

 

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]

示例 2:

输入:nums = []
输出:[]

示例 3:

输入:nums = [0]
输出:[]

 

提示:

  • 0 <= nums.length <= 3000
  • -105 <= nums[i] <= 105

 

 

 C#  Source code

public class Solution {
    public IList<IList<int>> ThreeSum(int[] nums) {
        IList<IList<int>> result = new List<IList<int>>();
            int n = nums.Length;
            if (n >= 3)
            {
                nums = nums.OrderBy(i => i).ToArray();
                // 枚举 a
                for (int first = 0; first < n; ++first)
                {// 需要和上一次枚举的数不相同
                    if (first > 0 && nums[first] == nums[first-1])
                    {
                        continue;
                    }
                    // c 对应的指针初始指向数组的最右端
                    int third = n - 1;
                    int target = -nums[first];
                    // 枚举 b
                    for (int second = first + 1; second < n; ++second)
                    {// 需要和上一次枚举的数不相同
                        if (second > first + 1 && nums[second] == nums[second-1])
                        {
                            continue;
                        } 
                        // 需要保证 b 的指针在 c 的指针的左侧
                        while (second < third && nums[second] + nums[third]>target)
                        {
                            --third;
                        }
                        // 如果指针重合,随着 b 后续的增加
                        // 就不会有满足 a+b+c=0 并且 b<c 的 c 了,可以退出循环
                        if (second==third)
                        {
                            break;
                        }
                        if (nums[second] + nums[third]==target)
                        {
                            List<int> ints = new List<int>() { nums[first], nums[second], nums[third] };
                            result.Add(ints);
                        }
                    }
                }
            }
            return result;
    }
}

 

 

 

 

后记:

以上代码为参考C++题解所做,搞了个暴力枚举,实在是太垃圾,就不上代码了。

另外小子添加了一个判断数组长度是不是大于等于3,这个似乎有点多余(还导致了改代码后提交屡次不过,最后才发现是n>3导致,没考虑到n=3的情况)。

 

标签:third,nums,int,三数,枚举,second,first
From: https://www.cnblogs.com/chengcanghai/p/16712067.html

相关文章

  • letcode算法--10.三数之和
    给你一个整数数组nums,判断是否存在三元组[nums[i],nums[j],nums[k]]满足i!=j、i!=k且j!=k,同时还满足nums[i]+nums[j]+nums[k]==0。请你返回所有......
  • 三数和
    三数和算法专家——JavaScript今天的问题是三数和它非常有趣。我们得到一个输入数组和一个目标值,并被要求返回所有可能的组合,这些组合可以和我们的目标相加。因此,如......
  • 最接近的三数之和
    目录题目描述解题思路解题代码题目描述题目地址:https://leetcode.cn/problems/3sum-closest/题目要求给你一个长度为n的整数数组 nums 和一个目标值 target。请......
  • 三数之和
    目录题目描述解题思路解题代码题目描述题目地址:https://leetcode.cn/problems/3sum/题目要求给你一个包含n个整数的数组 nums,判断 nums 中是否存在三个元素a,b......
  • LeetCode - 三数之和
    题目信息源地址:三数之和给你一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c,使得a+b+c=0,请你找出所有和为0且不重复的三元组。注意:答案中不可......
  • 力扣-15-三数之和
    直达链接前两天刚做了梦开始的地方两数之和常规思路是二层遍历,对于每个数都去遍历数组找有没有刚好能凑成指定数字的进阶思路是使用hashmap,一次遍历,对于每个元素去看hah......
  • 三数之和_15
    三数之和给你一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c,使得a+b+c=0?请你找出所有和为0且不重复的三元组。注意:答案中不可以包含重复的三......