LeetCode 15. 三数之和

这篇具有很好参考价值的文章主要介绍了LeetCode 15. 三数之和。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

三数之和

题目链接 15. 三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != kj != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

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

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。

示例 2:

输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。

示例 3:

输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0 。

题目解释

在数组中找到三个元素,然后让他们的和为0,注意的是我们结果不要重复.

算法原理

这个很简单,我们先排序.然后固定一个元素val,在这个前面寻找两个元素,求他们的和为-val.这不就退化成我们的两个元素之和了吗.这里我们需要解决两个问题

  • 为何当val为最大值的时候,我们在前面选两个数一定是所有情况,这是对于每一个结果而言,我们的三个元素中一定存在一个值比较大(都为0的也是符合下面的), 我们将数组中的每一个元素都作为一个最大值,让后遍历整个数组,就可以收取所有情况
  • 如何解决重复问题,这里提供两个方法,一个是都保存下来,等到最后处理,麻烦.第二个是在收集结果的时候就处理了

细节补充

补充下细节,我们如何处理.文章来源地址https://www.toymoban.com/news/detail-721343.html

  • 固定下最大值val, 收集结果之后跳过重复的val
  • 对于收集的一次结果,跳过重复的num[left]和num[right]

代码编写

class Solution
{
public:

  vector<vector<int>> threeSum(vector<int> &nums)
  {
    vector<vector<int>> reuslt;
    sort(nums.begin(), nums.end());

    for (int i = nums.size() - 1; i >= 2;)
    {
      int val = nums[i];
      int left = 0;
      int right = i - 1;
      while (left < right)
      {
        int sum = nums[left] + nums[right];
        if (sum + val == 0)
        {
          // 收集
          reuslt.push_back({nums[left], nums[right], val});
          // 跟新
          left++;
          right--;
          while (left < right && nums[left] == nums[left - 1])
            left++;
          while (left < right && nums[right] == nums[right + 1])
            right--;
        }
        else if (sum > -val)
        {
          right--;
        }
        else
        {
          left++;
        }
      }

      while (i >= 2 && nums[i] == val)
      {
        i--;
      }
    }
    return reuslt;
  }
};

到了这里,关于LeetCode 15. 三数之和的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode - 15 三数之和

    目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 15. 三数之和 - 力扣(LeetCode) 题目描述 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请 你返回所有和为 0 且不重复的三

    2024年02月09日
    浏览(29)
  • leetcode15. 三数之和(java)

    给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1: 输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,

    2024年02月10日
    浏览(28)
  • 【leetcode】15. 三数之和(medium)

    给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 这题真的好难,试了好多方法,最后参考了代码随想录的

    2024年02月13日
    浏览(27)
  • Leetcode每日一题:15. 三数之和(2023.7.9 C++)

    目录 15. 三数之和 题目描述: 实现代码与解析: 双指针 原理思路:         给你一个整数数组  nums  ,判断是否存在三元组  [nums[i], nums[j], nums[k]]  满足  i != j 、 i != k  且  j != k  ,同时还满足  nums[i] + nums[j] + nums[k] == 0  。请 你返回所有和为  0  且不重复的三元组

    2024年02月13日
    浏览(33)
  • 【算法专题--双指针算法】leecode-15.三数之和(medium)、leecode-18. 四数之和(medium)

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 双指针 常见的双指针有两种形式,一种是对撞指针,⼀种是左右指针。 对撞指针:一般用于顺序结构中

    2024年04月09日
    浏览(38)
  • leetcode两数、三数、四数之和

    如有错误,感谢不吝赐教、交流 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返

    2023年04月23日
    浏览(62)
  • 【LeetCode】一起探究三数之和的奥秘

    Problem: 15. 三数之和 首先我们来分析一下本题的思路 题目说到要我们在一个整数数组中去寻找三元组,而且呢这三个数字所相加的和为 0 ,而且呢这三个数的位置还要不一样 我们以这个示例1为例来看看,我列出了3种可能性,分别是 [-1, 0, 1] 、 [-1, 2, -1] 、 [0, 1, -1] ,不过呢我

    2024年02月09日
    浏览(51)
  • 【算法专题突破】双指针 - 三数之和(7)

    目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后: 题目链接:15. 三数之和 - 力扣(Leetcode)  题目就是要找出和为0的不重复的三元组, 注意三元组的每个元素是得不同的位置,那不重复又是什么意思呢? 我们可以看第一个示例, 他找出了三个三元组,但是他最后只返回

    2024年02月09日
    浏览(30)
  • 2023-07-08 LeetCode每日一题(三数之和)

    点击跳转到题目位置 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请 你返回所有和为 0 且不重复的三元组。 **注意:**答案中不可以包含重复的三元组。 提示: 3 = nums.length = 3000 -10 5

    2024年02月13日
    浏览(40)
  • 【算法挨揍日记】day04——15. 三数之和、18. 四数之和

      15. 三数之和 https://leetcode.cn/problems/3sum/ 给你一个整数数组  nums  ,判断是否存在三元组  [nums[i], nums[j], nums[k]]  满足  i != j 、 i != k  且  j != k  ,同时还满足  nums[i] + nums[j] + nums[k] == 0  。请你返回所有和为  0  且不重复的三元组。 注意: 答案中不可以包含重复的三元

    2024年02月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包