LeetCode 15. 3Sum
来源:互联网 发布:网络五大鬼畜歌曲 编辑:程序博客网 时间:2024/06/09 21:04
- 题目描述
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. 解题思路
首先这道题目可以暴力的做,三重循环,复杂度是O(n3) 。如果改进一下先排序再用头尾指针做,复杂度是O(n2+nlogn)=O(n2) 。
首先排序复杂度是O(nlogn) ,然后对数组的前n−3 个元素开始扫。假设当前取出的是第i个元素,那么头指针就指向i+1,尾指针指向n-1,开始扫。
如果nums[i]+nums[head]+nums[tail] ==0
结果放入答案集,且++head
如果nums[i]+nums[head]+nums[tail] >0
则–tail
如果nums[i]+nums[head]+nums[tail] >0
则++head代码实现
#include<algorithm>class Solution {public: vector<vector<int> > threeSum(vector<int>& nums) { vector<vector<int> > v; if(nums.size()<3){ return v; } sort(nums.begin(),nums.end()); for(int i=0;i<nums.size()-2;++i){ if(i!=0&&nums[i]==nums[i-1]){ continue; } int rest=-nums[i]; int head=i+1; int tail=nums.size()-1; while(tail>head){ if(nums[head]==nums[head-1]&&head!=i+1){ ++head; continue; } if(tail!=nums.size()-1&&nums[tail]==nums[tail+1]){ --tail; continue; } if(nums[tail]+nums[head]==rest){ vector<int> t; t.push_back(nums[i]); t.push_back(nums[head]); t.push_back(nums[tail]); v.push_back(t); ++head; } else if(nums[tail]+nums[head]>rest){ --tail; } else{ ++head; } } } return v; }};
0 0
- LeetCode 15. 3Sum
- LeetCode --- 15. 3Sum
- [Leetcode] 15. 3Sum
- 【LeetCode】15. 3Sum
- 【leetcode】15. 3sum
- 【leetcode】15. 3Sum
- [leetcode] 15. 3Sum
- leetcode 15. 3Sum
- leetcode 15. 3Sum
- leetcode 15. 3Sum
- Leetcode 15. 3Sum
- LeetCode - 15. 3Sum
- [LeetCode]15. 3Sum
- Leetcode 15. 3Sum
- leetcode 15. 3Sum
- leetcode 15. 3Sum
- 【leetcode】15. 3Sum
- Leetcode - 15. 3Sum
- 第二天:菜鸟的进步之道Service
- 划线样式的EditText,可选右侧删除按钮是否可见
- 运用JS设置cookie、读取cookie、删除cookie
- [Egret学习]error TS2304: 找不到名称“eui”。
- python dict创建一个数据库
- LeetCode 15. 3Sum
- 反射实例
- java HashMap和HashTable的区别
- citrix receiver runtime error
- Poj 2774 二分+字符串hash
- myls相关函数
- Snapshotting a view that has not been rendered results in an empty snapshot.
- 一个老鸟发的公司内部整理的 Android 学习路线图 Markdown 版本
- Java 流(Stream)