57-三数之和

给出一个有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<vector<int> > threeSum(vector<int> &nums) {
// write your code here
int size = nums.size(), target = 0;
if(size < 3) {
return vector<vector<int> >();
}
vector<vector<int> > result; int i = 0, j = 0, k = 0;
sort(nums.begin(), nums.end());
for(k=0; k<size; k++) {
if(k>0 && nums[k]==nums[k-1]) {
continue;
} for(i=k+1, j=size-1; i<j;) {
if(i>k+1 && nums[i]==nums[i-1]) {
i++;
continue;
}
if(j<size-1 && nums[j]==nums[j+1]) {
j--;
continue;
} int sum = nums[i] + nums[j] + nums[k]; if(target == sum) {
vector<int> 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;
}
};

最新文章

  1. JAVA的静态变量、静态方法、静态类
  2. ie8的兼容
  3. Spring Trasnaction管理(3)- 事务嵌套
  4. Java基础学习-- 继承 的简单总结
  5. WMI使用
  6. iPhone取消软件更新上边的1
  7. eclipse字体推荐
  8. HDU-1060(简单数学)
  9. 高仿QQ即时聊天软件开发系列之一开端
  10. js秒数转换时分秒方法
  11. [条款36]绝不重新定义继承而来的non-virtual函数
  12. 初识Selenium(一)
  13. hdu--1316--How Many Fibs?(java大数)
  14. MyBatis注解select in参数
  15. Java获取随机数的3种方法
  16. shell编程练习(四): 笔试31-68
  17. 分类-MNIST(手写数字识别)
  18. [数据库] - org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection
  19. tensorflow(二)----线程队列与io操作
  20. sqlldr并发

热门文章

  1. Vue--- Vue(Pubsub + Ajax) 数据交互
  2. webpack中使用vue
  3. SPOJ PRIME1 - Prime Generator(线性筛)
  4. MySQL字段的属性应该尽量设置为NOT NULL
  5. 快速玩转linux(2)
  6. Jmeter的安装教程【图文】
  7. Dockerfile中npm中Error: could not get uid/gid问题的解决方法
  8. hive 学习系列之七 hive 常用数据清洗函数
  9. python的爬虫代理设置
  10. SAPFiori