【leetcode】3Sum
来源:互联网 发布:php用户权限管理思路 编辑:程序博客网 时间:2024/06/02 05:30
描述:
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.
Note:
- Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
- The solution set must not contain duplicate triplets.
For example, given array S = {-1 0 1 2 -1 -4}, A solution set is: (-1, 0, 1) (-1, -1, 2)
分析:先排序,然后左右夹逼。时间复杂度是O(n2)
解决办法1:运行时间为64ms
class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> result; //当nums的size小于3时 return null if (nums.size() < 3) return result; sort(nums.begin(), nums.end()); const int target = 0; for (unsigned int i = 0; i <= nums.size() - 2; ++i) { if (i > 0 && nums[i] == nums[i-1]) continue; int j = i + 1; int k = nums.size() - 1; while(j < k) { int s = nums[i] + nums[j] + nums[k]; if (s > target) --k; else if (s < target) ++j; else { result.push_back({nums[i], nums[j], nums[k]}); while (nums[j] == nums[++j]); while (nums[k] == nums[--k]); } } } return result; }};
1) 将三个数相加修改为两数相加可以加快运行速度
2) 在for循环中添加一个剪枝操作,如果nums[i] > 0,则说明3数总和不可能为0,则退出循环
运行时间为52ms
class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> result; //当nums的size小于3时 return null if (nums.size() < 3) return result; sort(nums.begin(), nums.end()); for (unsigned int i = 0; i <= nums.size() - 2; ++i) { //如果nums[i]>0 if (nums[i] > 0) break; //如果nums[i]==nums[i-1]求的肯定是重复的答案,所以跳过 if (i > 0 && nums[i] == nums[i-1]) continue; int j = i + 1; int k = nums.size() - 1; int target = -nums[i]; while(j < k) { int tempSum = nums[j] + nums[k]; if (tempSum == target) { result.push_back({nums[i], nums[j], nums[k]}); while (nums[j] == nums[++j]); while (nums[k] == nums[--k]); } else if (tempSum > target) { --k; } else { ++j; } } } return result; }};
0 0
- 【Leetcode】3Sum (Sum)
- Leetcode:2Sum,3Sum
- 【Leetcode】3Sum Closest (Sum)
- leetcode 2 sum 3sum 4sum
- Leetcode 2SUM-3SUM-4SUM
- Leetcode-2sum,3sum,4sum
- leetcode 2 sum & 3 sum & 4 sum
- [LeetCode] 2Sum, 3Sum, 4Sum, 3SUm closet
- [LeetCode] K sum(2Sum、3Sum、4Sum)
- leetcode--sum集合:2sum,3sum,4sum
- leetcode --- 2 sum , 3 sum , 4 sum , k sum problem
- LeetCode: 3Sum
- LeetCode: 3 Sum Closest
- leetcode - 3 Sum
- leetcode - 3 sum closest
- leetcode 3Sum
- leetcode 3Sum Closest
- LeetCode: 3Sum
- 线段树
- 【Linux驱动】字符设备驱动
- iOS 简单使用sqlite3数据库
- GenericServlet
- OC字典(NSDictionary)和集合(NSSet)的总结
- 【leetcode】3Sum
- 从大数据菜鸟走上大师的历程 Scala 第十讲 apply
- (十八)赋值“=”
- Adreno Profiler分析任意安卓游戏特效+抓取资源
- 5.12 输出合并阶段
- 爬爬爬之路:UI(十三) 数据解析
- 第一次安装loadrunner报错记录
- 从大数据菜鸟走上大师的历程 Scala 第十一讲 extends
- D3.js学习