15. 3Sum
来源:互联网 发布:谭铁牛 人工智能 编辑:程序博客网 时间:2024/06/10 23:52
1、题目描述
输入一个数组,返回所有不同的三个元素的组合,使得三个元素之和等于0,在每个组合里每个元素只可以使用一次。
2、思路
Two Pointers。
将按升序数组排序。取数组的一个元素(num[i])为三元组的第一个元素,从i+1到n-1的区间中用two pointers 的方法找到俩元素,
使得三者之和为0。若成功找到,要注意两个pointers要跳过数组中跟上次组三元组相同的元素,再次进行寻找。一次循环的复杂度为O(n);
要从头到尾n次上述操作。
总的复杂度为O(n^2)
3、代码
vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>>ans; sort(nums.begin(),nums.end()); int n = nums.size(); for(int i=0;i<n;i++){ if(i==0||nums[i]>nums[i-1]){ for(int j=i+1,k=n-1;j<k;){ if(nums[i]+nums[j]+nums[k]==0){ vector<int>v; v.push_back(nums[i]); v.push_back(nums[j]); v.push_back(nums[k]); ans.push_back(v); while(nums[j]==nums[j+1] && j<k)j++; while(nums[k]==nums[k-1] && j<k)k--; j++;k--; } else if(nums[i]+nums[j]+nums[k]>0) k--; else j++; } } } return ans; }
阅读全文
0 0
- 15. 3Sum && 16 sum closet && 18 4sum
- 15. 3Sum 和 18. 4Sum
- 1. Two Sum&15. 3Sum
- LeetCode 15. 3Sum
- LeetCode --- 15. 3Sum
- [Leetcode] 15. 3Sum
- 【LeetCode】15. 3Sum
- 15. 3Sum
- 【leetcode】15. 3sum
- 【leetcode】15. 3Sum
- 15. 3Sum
- [leetcode] 15. 3Sum
- 15. 3Sum
- 15. 3Sum
- 15. 3Sum
- 15. 3Sum
- 15. 3Sum
- leetcode 15. 3Sum
- 三种 mongodb 的驱动库的对比
- xml学习笔记②PHP DOM--对xml文件进行更新操作
- HttpClient 4.3连接池参数配置及源码解读
- Android 6.0 WRITE_SETTINGS权限问题
- 跟随手指移动的小球
- 15. 3Sum
- 2017-12-14 乱入一道C++类的学习的题(静态数据成员初始化)
- KeyStore 和 TrustStore
- 20171214Link
- 高仿微信-微信EM开发流程--(3)Android6.0动态权限申请
- 考取Atlassian产品的专业认证书-Atlassian Certified JIRA Administrator (ACP-100)
- 登录时的眼睛
- Python 花瓣网动态爬虫
- js变量声明以及作用域的问题