题意:给一个vector<int>容器,要求每当找到3个元素之和为0时就将这3个数按大小顺序记下来,用一个二维vector返回。也就是vector< vector<int> >类型的。

思路:2sum是用的两个指针,那么3sum就可以利用2sum的思路解决,假如先挑一个元素出来,则还需挑2个元素,就可以用2sum的思路了。首先将n个元素排序先。怎么挑第1个元素?一共有n种选择,但是为了防止重复,后2个不用挑,留给两个指针来解决,也就是有n-2个元素。而两个指针的可以挑的有哪些呢?假设第1个元素是第i个,那么这两个指针应该在第i个之后的元素挑,为什么呢?

比如数组为:-2 -1 0 1 2

第一轮循环:

  第一个元素:-2

  第二个元素:0

  第三个元素:2

第2轮循环应该是:

  第一个元素:-1

  第二个元素:0  (难道还想试试-2? -2可以搭配的所有可能都已经试出来了,这里不用再重试了)

  第三个元素:1

 class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
sort(num.begin(), num.end()); //排序
vector<int> group(,);
vector< vector<int> > ans;
int n=num.size(),sum,sum2,*pl,*pr,old=;
for(int i=; i<n-; i++ )
{
if( num[i] == old ) continue;//去重,首数字不能重复
else old = num[i];
sum2 = - num[i];//寻找余下两数之和
pl = &num[i+];//左指针
pr = &num[n-];//右指针
while(pl!=pr)
{
sum = *pl + *pr;
if( sum == sum2 )
{
if( group[]!=num[i] || group[]!=*pl || group[]!=*pr)//去重,防止找到的和上一次刚好一样
{
group[] = num[i];
group[] = *pl;
group[] = *pr;
ans.push_back(group);
}
pl++;
}
else if( sum > sum2 ) pr--;
else pl++;
}
}
return ans;
}
};

3Sum

LeetCode OJ 3Sum 3个整数之和的更多相关文章

  1. [LeetCode] 259. 3Sum Smaller 三数之和较小值

    Given an array of n integers nums and a target, find the number of index triplets i, j, k with 0 < ...

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

    Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...

  3. LeetCode OJ:Combination Sum (组合之和)

    Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C wher ...

  4. LeetCode 16. 3Sum Closest(最接近的三数之和)

    LeetCode 16. 3Sum Closest(最接近的三数之和)

  5. LeetCode OJ:Integer to Roman(转换整数到罗马字符)

    Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 t ...

  6. leetcode python两整数之和

    # Leetcode 371 两整数之和***### 题目描述 **不使用**运算符 `+` 和 `-` ​​​​​​​,计算两整数 `​​​​​​​a `.`b` ​​​​​​​之和. **示例1: ...

  7. Java实现 LeetCode 371 两整数之和

    371. 两整数之和 不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a .b ​​​​​​​之和. 示例 1: 输入: a = 1, b = 2 输出: 3 示例 2: 输入: ...

  8. Leetcode OJ 刷题

    Valid Palindrome吐槽一下Leetcode上各种不定义标准的输入输出(只是面试时起码能够问一下输入输出格式...),此篇文章不是详细的题解,是自己刷LeetCode的一个笔记吧,尽管没有 ...

  9. LeetCode OJ 题解

    博客搬至blog.csgrandeur.com,cnblogs不再更新. 新的题解会更新在新博客:http://blog.csgrandeur.com/2014/01/15/LeetCode-OJ-S ...

随机推荐

  1. GridView 高亮某一行

    <script type="text/javascript"> $(document).ready(function () { $("#GridView tr ...

  2. [Windows]获取系统版本号

    1 string GetMainProgInfo() 2 { 3 string strRet; 4 TCHAR szPath[MAX_PATH]; 5 GetModuleFileName(NULL,s ...

  3. -bash: ./bak_1.py: /usr/bin/python^M: bad interpreter: 没有那个文件或目录

    在Windows的PyCharm中编写了一个Python文件,然后上传至CentOS中,已经添加执行权限,但是仍然会报如下的错误: 代码如下: #!/usr/bin/python # -*- codi ...

  4. GoWeb开发_Iris框架讲解(三):路由功能处理方式

    Context概念 Context是iris框架中的一个路由上下文对象,在iris框架中的源码路径定义为:{$goPath}\github.com\kataras\iris\context\conte ...

  5. bzoj4373:算数天才与等差数列

    算术天才⑨非常喜欢和等差数列玩耍. 有一天,他给了你一个长度为n的序列,其中第i个数为a[i]. 他想考考你,每次他会给出询问l,r,k,问区间[l,r]内的数从小到大排序后能否形成公差为k的等差数列 ...

  6. Codevs 1080 线段树练习(CDQ分治)

    1080 线段树练习  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 一行N个方格,开始每个格子里都有 ...

  7. knockout+MVC+webapi+sqlserver完成增删查改

    快过年了,公司的事情较少,想着开始学习点新东西.这段时间一个项目用到了mvc和webapi,然后一直对knockout比较感兴趣,就想着用这个框架做一个小实例.数据库采用的是sqlserver.话不多 ...

  8. java8List集合根据对象的属性去重

    import static java.util.Comparator.comparingLong; import static java.util.stream.Collectors.collecti ...

  9. 高效法则 之 你还在用这么low的方法打开软件吗?

    电脑上的诸多功能被组织成软件的形式提供给用户.聊天的有QQ/Skype,看电影的有腾讯视频/芒果TV,听音乐的有酷狗/LessDJ,做图的有PS/Sketch,写代码搞开发的各种IDE Eclipse ...

  10. 开源库SRT编译指南

    SRT(Secure,Reliable,Transport)是Haivision公司开发的一套开源媒体传输协议,用于在不稳定的网络环境下,优化媒体数据的传输性能.  SRT的码流加密基于开源库open ...