15. 3Sum
来源:互联网 发布:视频广告过滤 知乎 编辑:程序博客网 时间:2024/06/08 19:01
题目:
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)
题意:
从给定的数组中找出所有三个数相加和为0的组合。组合需要满足 a ≤ b ≤ c。
思路:
先排序,然后左右夹逼,复杂度O(n2)。这个方法可以推广到k-sum,先排序,然后做k。
class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> result; if(nums.size()<3){ return result; } const int target = 0; sort(nums.begin(), nums.end()); auto last = nums.end(); for(auto i=nums.begin(); i<last-2; i++){ auto j = i+1; if(i>nums.begin() && *i==*(i-1)) continue; auto k = last-1; while(j<k){ if(*i+*j+*k<target){ ++j; while(*j==*(j-1) && j<k) ++j; }else if(*i+*j+*k>target){ --k; while(*k==*(k+1) && j<k) --k; }else{ result.push_back({*i, *j, *k}); ++j; --k; while(*j==*(j-1) && *k==*(k+1) && j<k) ++j; } } } return result; }};
public class Solution { public List<List<Integer>> threeSum(int[] nums) { Arrays.sort(nums); List<List<Integer>> result = new LinkedList<>(); for(int i=0; i<nums.length-2; i++){ if(i==0 || (i>0 && nums[i]!=nums[i-1])){ int j = i+1; int k = nums.length-1; int target = 0 - nums[i]; while(j<k){ if(nums[j]+nums[k]==target){ result.add(Arrays.asList(nums[i], nums[j], nums[k])); while(j<k && nums[j]==nums[j+1]) j++; while(j<k && nums[k]==nums[k-1]) k--; j++; k--; }else if(nums[j]+nums[k]<target){ j++; }else{ k--; } } } } return result; }}
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
- HDU 5112 A Curious Matt
- 最新python中一升级所有已安装的包方法
- POJ 2431 Expedition
- Percona Xtrabackup myql 快速备份与恢复
- HDU 5113 Black And White(搜索+剪枝)
- 15. 3Sum
- CSR8670脱机运行后串口通信异常
- Problem-O
- 神奇的 BlocksKit (一)
- NKOI 1008 核电站
- java Io流中对象序列化和反序列问题
- Tarjan三大算法之强连通分量
- js事件之event.preventDefault()与event.stopPropagation()用法区别
- HDU 5115 Dire Wolf(区间DP)