【leetcode】第15题:3sum(medium)
2016-03-17 16:32
435 查看
题目如下:
![](https://img-blog.csdn.net/20160317163222039?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
代码如下:
代码如下:
package com.leetcode; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; public class Solution14 { public static List< List< Integer >> threeSum(int [ ] nums){ //先将数组排序 Arrays.sort(nums); List<List< Integer >> list = new ArrayList<List< Integer >>(); for(int i = 0; i< nums.length; i++){ if(i == 0||(i > 0 && nums[ i ] != nums[ i-1] )){ int low = i+1, high = nums.length-1, sum = 0-nums[i]; while(low<high){ if( nums[low] + nums[high] == sum){ list.add(Arrays.asList( nums[i], nums[low], nums[high])); //判断下一个元素是否和这个元素相同,如果相同就继续low++遍历,这就是为什么药排序的原因 //排完序后相同的元素都在一起 while( low < high && nums[ low ] == nums[ low+1 ]) low++; while(high > low && nums[ high ] == nums[high-1] ) high--; low++;high--; //判断向前的和是否小于sum,如果小了,那么就是nums[low]小了 } else if( nums[low] + nums[high] < sum ){ low++; //反之就是high大了 }else{ high--;} } } } return list; } public static void main(String[] args) { // TODO Auto-generated method stub int[ ] nums = {-1, 0 ,1, 2, -1, -4}; List< List< Integer >> list = Solution14.threeSum(nums); Iterator it = list.iterator(); for(int i = 0; i< list.size() ; i++){ System.out.println(list.get(i)); } } }
相关文章推荐
- hbase 新版本 java api 遍历
- 字符串的组合
- 关于iOS多线程
- UNIX网络编程 poll函数
- 字符串的组合
- CUBRID学习笔记 33 net事务 cubrid教程示例
- Android之环境搭建下载路径
- 夺命雷公狗---DEDECMS----7dedecms目录结构
- 第三次作业(2)
- 什么是session ?它和cookie有什么区别和联系
- 78. Subsets
- 3357: [Usaco2004]等差数列|DP
- mysql ERROR 1045 (28000): Access denied for user解决方法 (转)
- android文件上传到服务器
- 第三次作业(1) Visual Studio程序安装过程和练习过程
- 【Java】数组属性的例子
- kettle 邮件 附件 smtp
- UNICODE与ANSI的区别【转】
- spring事务管理几种方式(转)
- 执行ubuntu脚本出现 Syntax error: "(" unexpected错误