计蒜客 难题题库 033 三个数的和
2015-08-10 09:22
148 查看
645次
6.20%
1000ms
65536K
给定数组S,判断数组中的元素知否存在a,b,c,使得a+b+c=0。
找出所有满足条件的元素并输出。
注意:元素a,b,c必须满足 a ≤ b ≤ c解集不重复。
格式:第一行输入一个数n,接下来一行输入数组S(n个元素),接下来输出所有满足条件的解集。
如果不存在,则不输出任何东西。
例如:S = {-1 0 1 2 -1 -4}
则对应的解集为: (-1, 0, 1)和(-1, -1, 2)
提示:vector threeSum(vector &num)
输出:
6.20%
1000ms
65536K
给定数组S,判断数组中的元素知否存在a,b,c,使得a+b+c=0。
找出所有满足条件的元素并输出。
注意:元素a,b,c必须满足 a ≤ b ≤ c解集不重复。
格式:第一行输入一个数n,接下来一行输入数组S(n个元素),接下来输出所有满足条件的解集。
如果不存在,则不输出任何东西。
例如:S = {-1 0 1 2 -1 -4}
则对应的解集为: (-1, 0, 1)和(-1, -1, 2)
提示:vector threeSum(vector &num)
样例1
输入:6 3 0 -2 -1 1 2
输出:
-2 -1 3 -2 0 2 -1 0 1
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main(){ int n, i, j, k; vector<int> vi; cin >> n; vi.resize(n); for(i = 0; i < n; ++i){ cin >> vi[i]; } sort(vi.begin(), vi.end()); int temp; for(k = 0; k + 2 < n; ++k){ while(k && k + 2 < n && vi[k - 1] == vi[k]){ ++k; } i = k + 1; j = n - 1; while(i < j){ temp = vi[k] + vi[i] + vi[j]; if(temp == 0){ cout << vi[k] << " " << vi[i] << " " << vi[j] << " " << endl; ++i; while(i < j && vi[i - 1] == vi[i]){ ++i; } --j; while(i < j && vi[j + 1] == vi[j]){ --j; } }else if(temp < 0){ ++i; }else{ --j; } } } }
相关文章推荐
- hdu5339Untitled
- jQuery图片上传前先在本地预览
- Android官方数据绑定框架DataBinding(一)
- JAVA 基本数据类型长度
- Run
- 深入学习C语言中的函数指针和左右法则
- 信号包络
- Spring HTTP Invoker使用介绍
- 计蒜客 难题题库 032 罗马数字
- 8月书讯:喜悦翩然而至
- 安卓安装过程
- SAP*和DDIC用户被锁分析与解决方案
- XXXX
- My debug:error C2275: “XXX”: 将此类型用作表达式非法
- atomthread 在 iar-stm8中编译错误
- 如何将动态URL静态化!
- Remove Duplicates from Sorted List II
- 计蒜客 难题题库 031 无脑博士的试管们
- 计蒜客 难题题库 030 合法分数的组合
- CSS3实现的一批hover特效