(java)3sum
2015-11-04 13:43
477 查看
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.
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)
思路:本题是典型的k值相加的问题,暴力枚举是每个人都能想到的,但是时间复杂度为o(n^3),太高了,肯定是过不了的,本题可以先对数组排序然后设置一个定点,设置两个指针,一个指向这个定点的下一个位置L,一个指向数组的最后一个位置R,当结果大于target时,R--,当结果小于target时,L++;这样整个算法的时间复杂度是排序的o(nlgn)+o(n^2);
代码如下(已通过leetcode)
public class Solution { List<List<Integer>> lists= new ArrayList<List<Integer>>(); public List<List<Integer>> threeSum(int[] nums) { if(nums==null) return null; int length=nums.length; Arrays.sort(nums); for(int i=0;i<length-2;i++) { if(i>0 && nums[i]==nums[i-1]) continue; findit(nums,i+1,length-1,nums[i]); } return lists; } public void findit(int[] nums,int begin,int end,int target) { int l=begin; int r=end; while(l<r) { if(nums[l]+nums[r]+target==0) { List<Integer> list= new ArrayList<Integer>(); list.add(target); list.add(nums[l]); list.add(nums[r]); lists.add(list); while(l<r && nums[l]==nums[l+1]) l++; while(l<r && nums[r]==nums[r-1]) r--; l++; r--; } else { if(nums[l]+nums[r]+target<0) l++; else r--; } } } }
相关文章推荐
- 从”JAVA“而终 12:java集合框架API讲解
- spring mvc 图形验证码
- java.sql.Date 和java.util.Date 互转
- Spring in action 学习(2)创建Bean
- ActiveMQ学习总结(5)——Java消息服务JMS详解
- ActiveMQ学习总结(5)——Java消息服务JMS详解
- ActiveMQ学习总结(5)——Java消息服务JMS详解
- ActiveMQ学习总结(5)——Java消息服务JMS详解
- web.xml中的contextConfigLocation在spring中的作用
- java 文件的压缩
- 将Eclipse包括第一3正方形jar包裹Project Export并产生能够执行jar
- 杭电ACM 1041 Computer Transformation java代码详解AC
- Java的四种引用类型
- java常见的几种内存溢出和解决方案
- Stackoverflow上人气最旺的10个Java问题
- Java 理论与实践: 处理 InterruptedException
- Java String类的intern方法
- spring boot下使用logback或log4j生成符合Logstash标准的JSON格式
- java源码分析之ArrayList
- java 常用快捷键