三数之和LeetCode15
题目描述
思路
我们如果是乱序的数组,如何集合去重?很困难!所以我们先想排序,再进行接下来的操作.
如果使用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相关推荐
- 三数之和—leetcode15
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复的三元 ...
- LeetCode15. 三数之和 16. 最接近的三数之和
LeetCode15. 三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组 ...
- 【LeetCode15】三数之和
三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意:答案中不可以包含 ...
- LeetCode 15. 三数之和(3Sum)
15. 三数之和 15. 3Sum 题目描述 Given an array nums of n integers, are there elements a, b, c in nums such th ...
- 伍六七带你学算法 进阶篇-三数之和
三数之和 难度-中等 题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意 ...
- LeetCode实战:最接近的三数之和
题目英文 Given an array nums of n integers and an integer target, find three integers in nums such that ...
- LeetCode实战:三数之和
题目英文 Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? ...
- 算法-----三数之和等于0
三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件 且不重复的三元组. 注意:答案中不可以包含重 ...
- python【力扣LeetCode算法题库】16- 最接近的三数之和
最接近的三数之和 给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在唯一答 ...
最新文章
- Linux安装配置Java1.8开发环境
- java游戏开发基础Swing之JRadioButton
- 网络编程(part9)--socket套接字编程之TCP套接字
- linux 15秒 搭建VSFTPD文件服务器
- 卷积神经网络学习指南_卷积神经网络的直观指南
- @JsonFormat与@DateTimeFormat注解的使用
- 激光干涉仪使用方法_激光干涉仪选择几点建议「智能制造2025」
- 华为 P30系列最高补贴1200元!华为开启以旧换新服务了
- 一大波问题解决和配置备份 WCF快炼成精了
- StringBuffer和StringBuilder总结
- HotSpot虚拟机对象揭秘
- ASPEN hysys焓值、熵值转化换算
- Emu8086下载和注册
- 自动驾驶4WS车辆路径跟踪最优控制算法仿真
- 标准功能模块组件 -- 内部联络单组件,内部邮件组件,提高多人异地协同办公效率
- 锐捷服务器虚拟化技术_信息化的好拍档,锐捷助力南昌市第五医院再迎新征程...
- 真三国无双8二十四项修改器风灵月影版
- STM32F103ZE和STM32F207ZG的芯片区别
- NAACL 2022 | FACTPEGASUS:抽象摘要的真实性感知预训练和微调
- 计算机语言的发明者,Lisp语言发明者、“人工智能之父” John McCarthy与世长辞
热门文章
- linux-x86_64 error,Linux-x86_64 Error: 28: No space left on device问题
- uc/OS-II操作系统:uc/OS基本概念及认识(从零到负,打通你的任督二脉)
- 苹果6怎么关闭运行程序_苹果手机提醒:滑动关闭后台程序,不仅费电还会损伤电池...
- 人力资源外包根据HR管理职能的七大分类
- 弘辽科技:2022年聚划算3.8好女王节招商规则是什么?
- Mobx useStrict is not a function
- 开源算法介绍(Arcane Style)「将肖像转化成双城之战风格的漫画脸」
- html 下拉列表 模糊查询,JS实现模糊查询带下拉匹配效果
- VS Code配置Go语言开发环境
- P1344 [USACO4.4] 追查坏牛奶Pollutant Control