博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lintcode-57-三数之和
阅读量:5291 次
发布时间:2019-06-14

本文共 1317 字,大约阅读时间需要 4 分钟。

给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。

注意事项

在三元组(a, b, c),要求a <= b <= c。

结果不能包含重复的三元组。

样例

如S = {-1 0 1 2 -1 -4}, 你需要返回的三元组集合的是:

(-1, 0, 1)
(-1, -1, 2)

标签

数组 排序 两根指针 脸书

思路

首先升序排序数组
然后定义下标变量 k , i , j 。如果简单的遍历,那么跟是否有序没有关系,其时间复杂度将达到O(n^3)。
但是,如果当前选择了a、b、c三个数,如果其和小于目标target,那么需要将其中一个数用更大的数替换;反之亦然。但究竟替换三个数中的哪个数?可以先固定一个数(k),当前值小于target时,可以让 i 增加;否则,j 减小。

code

class Solution {public:        /**     * @param numbers : Give an array numbers of n integer     * @return : Find all unique triplets in the array which gives the sum of zero.     */    vector
> threeSum(vector
&nums) { // write your code here int size = nums.size(), target = 0; if(size < 3) { return vector
>(); } vector
> result; int i = 0, j = 0, k = 0; sort(nums.begin(), nums.end()); for(k=0; k
0 && nums[k]==nums[k-1]) { continue; } for(i=k+1, j=size-1; i
k+1 && nums[i]==nums[i-1]) { i++; continue; } if(j
temp; temp.push_back(nums[k]); temp.push_back(nums[i]); temp.push_back(nums[j]); result.push_back(temp); i++; j--; } else if(target < sum) { j--; } else { i++; } } } return result; }};

转载于:https://www.cnblogs.com/libaoquan/p/7090852.html

你可能感兴趣的文章
Lodop获取客户端主网卡ip地址是0.0.0.0
查看>>
VSCODE更改文件时,提示:EACCES: permission denied的解决办法(mac电脑系统)
查看>>
web前端之路,js的一些好书(摘自聂微东 )
查看>>
【模板】对拍程序
查看>>
微信小程序开发初体验
查看>>
dos批处理(bat)运行exe
查看>>
关键字
查看>>
Pycharm安装Markdown插件
查看>>
上传图片并预览
查看>>
哈夫曼编码_静态库
查看>>
【转】redo与undo
查看>>
C#更新程序设计
查看>>
常用Request对象获取请求信息
查看>>
解决升级系统导致的 curl: (48) An unknown option was passed in to libcurl
查看>>
Shell命令-内置命令及其它之watch、date
查看>>
Java Session 介绍;
查看>>
spoj TBATTLE 质因数分解+二分
查看>>
Django 模型层
查看>>
第8章-方法
查看>>
dedecms讲解-arc.listview.class.php分析,列表页展示
查看>>