题目描述

思路

我们如果是乱序的数组,如何集合去重?很困难!所以我们先想排序,再进行接下来的操作.

如果使用for三重循环,肯定是会超时的.考虑固定第一个指针,第二个指针在第一个指针右边,不断变大,为了最后的a+b+c=0(此时的a是固定的数值), 随着b的变大,c一定是会变小的,也就是说,b和c的选择就不是先选择b,再选择c的,我们可以同时选择!令b=a+1(指针意义上的加一!),c=nums

[size-1],那么大体思路上就已经解决了.

细节问题

对于-1,-1,-1,0,1,2,4这个数组,我们如果做才能使得结果中只有一组{-1,-1,2}这个数据呢?对于i,j两个指针,我们为了避免元素,对于第一个指针,只需要第一个重复元素即可,但是对于第二个指针,我们不能只是简单通过nums[begin]=nums[begin-1]来判断是否跳过,比如-1,-1,2,如果这样做,第二个直接就跳过了第二个"-1",答案就少了一个,所以我们要给第二个指针加上一个约束条件,第二个指针下标减去第一个指针下标要大于一.

代码实现

#include<iostream>
#include<vector>
#include<unordered_map>
#include<algorithm>
using namespace std;class Solution {
public:vector<vector<int> > res;void twoSum(vector<int>& nums,int begin,int end,int target,int index) {int flag = 0;while (begin < end) {if (nums[begin] + nums[end] > target) {end--;}else if (nums[begin] + nums[end] < target) { begin++; }else {if (begin>index+1&&nums[begin]==nums[begin-1]) {        //这里也是我没想到的.我们每一次比较,都是和上一个元素进行比较begin++;continue;}res.push_back({ nums[index] ,nums[begin],nums[end]});begin++;end--;}}}vector<vector<int>> threeSum(vector<int>& nums) {int i, j, k;int size = nums.size();sort(nums.begin(), nums.begin() + nums.size());for (i = 0; i < size;++i) {if (i > 0 && nums[i] == nums[i - 1]) continue;          //这个是我没有想到的...同样的还是和上一个元素进行比较twoSum(nums, i + 1, size - 1, -nums[i], i);}return res;}
};

[注]index是第一个指针,begin是第二个指针,end是第三个指针.

三数之和LeetCode15相关推荐

  1. 三数之和—leetcode15

    给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复的三元 ...

  2. LeetCode15. 三数之和 16. 最接近的三数之和

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

  3. 【LeetCode15】三数之和

    三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意:答案中不可以包含 ...

  4. LeetCode 15. 三数之和(3Sum)

    15. 三数之和 15. 3Sum 题目描述 Given an array nums of n integers, are there elements a, b, c in nums such th ...

  5. 伍六七带你学算法 进阶篇-三数之和

    三数之和 难度-中等 题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意 ...

  6. LeetCode实战:最接近的三数之和

    题目英文 Given an array nums of n integers and an integer target, find three integers in nums such that ...

  7. LeetCode实战:三数之和

    题目英文 Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? ...

  8. 算法-----三数之和等于0

    三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件 且不重复的三元组. 注意:答案中不可以包含重 ...

  9. python【力扣LeetCode算法题库】16- 最接近的三数之和

    最接近的三数之和 给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在唯一答 ...

最新文章

  1. Linux安装配置Java1.8开发环境
  2. java游戏开发基础Swing之JRadioButton
  3. 网络编程(part9)--socket套接字编程之TCP套接字
  4. linux 15秒 搭建VSFTPD文件服务器
  5. 卷积神经网络学习指南_卷积神经网络的直观指南
  6. @JsonFormat与@DateTimeFormat注解的使用
  7. 激光干涉仪使用方法_激光干涉仪选择几点建议「智能制造2025」
  8. 华为 P30系列最高补贴1200元!华为开启以旧换新服务了
  9. 一大波问题解决和配置备份 WCF快炼成精了
  10. StringBuffer和StringBuilder总结
  11. HotSpot虚拟机对象揭秘
  12. ASPEN hysys焓值、熵值转化换算
  13. Emu8086下载和注册
  14. 自动驾驶4WS车辆路径跟踪最优控制算法仿真
  15. 标准功能模块组件 -- 内部联络单组件,内部邮件组件,提高多人异地协同办公效率
  16. 锐捷服务器虚拟化技术_信息化的好拍档,锐捷助力南昌市第五医院再迎新征程...
  17. 真三国无双8二十四项修改器风灵月影版
  18. STM32F103ZE和STM32F207ZG的芯片区别
  19. NAACL 2022 | FACTPEGASUS:抽象摘要的真实性感知预训练和微调
  20. 计算机语言的发明者,Lisp语言发明者、“人工智能之父” John McCarthy与世长辞

热门文章

  1. linux-x86_64 error,Linux-x86_64 Error: 28: No space left on device问题
  2. uc/OS-II操作系统:uc/OS基本概念及认识(从零到负,打通你的任督二脉)
  3. 苹果6怎么关闭运行程序_苹果手机提醒:滑动关闭后台程序,不仅费电还会损伤电池...
  4. 人力资源外包根据HR管理职能的七大分类
  5. 弘辽科技:2022年聚划算3.8好女王节招商规则是什么?
  6. Mobx useStrict is not a function
  7. 开源算法介绍(Arcane Style)「将肖像转化成双城之战风格的漫画脸」
  8. html 下拉列表 模糊查询,JS实现模糊查询带下拉匹配效果
  9. VS Code配置Go语言开发环境
  10. P1344 [USACO4.4] 追查坏牛奶Pollutant Control