LeetCode 3sum
来源:互联网 发布:mac chrome插件导出 编辑:程序博客网 时间:2024/06/05 11:25
链接: https://oj.leetcode.com/problems/3sum/
2sum:尺取法 通过a+b与target比较,.根据大于或小于不断缩小范围
3sum:即对0~n个数分别做2sum...
去重:
if(i!=0&&num[i]==num[i-1])continue;
只有当i==0或者当前的数!=上一个数时才继续计算2sum
下面简单说明一下:
当前数为num[i]时,则需要在num[i+1~n]中找到一个2sum==-num[i]; 但是因为num[i]==num[i-1],该2sum肯定会被case2中,重复 //case1
当前数为num[i-1]时,需要在num[i~n]中找到一个2sum==-num[i-1];, //case2
当时只这样判断去重是不行的.测试数据:
-2,0,0,2,2
还需要加上
if(!ans.contains(tans))
完整代码:
public class Solution{public List<List<Integer>> threeSum(int[] num ){List<Integer> tans=new ArrayList<Integer>();List<List<Integer>> ans=new ArrayList<List<Integer>>();Arrays.sort(num);for(int i=0;i<num.length-2;i++){int l=i+1,r=num.length-1;if(i!=0&&num[i]==num[i-1])continue;while(l<r){if(num[l]+num[r]+num[i]==0){tans.add(new Integer(num[i]));tans.add(new Integer(num[l]));tans.add(new Integer(num[r]));if(!ans.contains(tans)){ ans.add(new ArrayList<Integer>(tans));}tans.clear();l++;r--;}else if(num[l]+num[r]+num[i]<0){l++;}else{r--;}}}return ans;}}
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
- LEETCODE: Letter Combinations of a Phone Number
- 第16周oj项目4输出奇数因子
- mysql中distinct去除重复值方法
- JSP传值后台乱码解决
- 【CUDA并行编程之四】矩阵相乘
- LeetCode 3sum
- excel 统计一个区域的内容是否完全在另一个区域内。
- maven myeclipse10 整合开发web项目-3
- javascript 类对象的应用
- 再谈sql注入
- 检索树
- “真三”中的人生哲理
- 递归
- 【BZOJ2006】【NOI2010】超级钢琴 Heap+主席树