leetcode 15. 3Sum
来源:互联网 发布:mysql数据定义语言 编辑:程序博客网 时间:2024/06/01 08: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.
Note: 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]题目大意:]
给定由n个整数组成的数组,数组里面是否存在的3个元素使之组成的和为0.找出所有满足的结果。
题目思路:
先对数组进行排序,然后逐个遍历,注意的是要去重,因为数组未排序且含有相同元素,故在这里选择用HashSet去重。
对应给定的i, j,k分别从i+1,nums.length-1对应数组序号开始遍历,若三个数之和大于sum,k--,否则,j++.
将满足条件分别加入动态数组l中,再判断set中是否含有l,没有则加入set中。
AC代码:
Java:
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> res=new ArrayList<>();
HashSet<List<Integer>> set=new HashSet<>();
for(int i=0;i<nums.length-2;i++)
{
for(int j=i+1,k=nums.length-1;j<k;){
int sum=nums[i]+nums[j]+nums[k];
if(sum==0){
List<Integer> l=new ArrayList<Integer>();
l.add(nums[i]);
l.add(nums[j]);
l.add(nums[k]);
if(set.add(l))
res.add(l);
j++;
k--;
}
else if(sum<0)
j++;
else
k--;
}
}
return res;
}
C:
vector<vector<int>> threeSum(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<vector<int>> res;
for(int k = 0; k < nums.size(); k++){
if(nums[k] > 0) break;//排序过后的第一个肯定是负数
while(k > 0 && nums[k] == nums[k - 1]) k++;//避免重复
int target = 0 - nums[k];
int i = k + 1;
int j = nums.size() - 1;
while(i < j){
if(nums[i] + nums[j] == target){
res.push_back({nums[k], nums[i], nums[j]});//直接pushback,不要用vector<int> level了
i++;//别忘了
j--;
while(i < j && nums[i] == nums[i - 1]) i++;//避免重复
while(i < j && nums[j] == nums[j + 1]) j--;//两个方向 加减1不同
}else if(nums[i] + nums[j] < target){
i++;
}else{
j--;
}
}
}
return res;
}
- 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
- 外观模式
- 学习Opencv(一)
- Centos7-1611 安装LAMP
- 对MapReduce一些理解
- 1018. 锤子剪刀布 (20)
- leetcode 15. 3Sum
- 利用java 编写简易贪吃蛇游戏
- ChromeDriver cannot find Chrome binary问题解决
- Java Character
- HTML5 Canvas画布
- 第11章 持有对象
- 欢迎使用CSDN-markdown编辑器
- [题解] POJ 3107 Godfather(树型DP 求树的直径)
- Hive优化总结(1)