题解 | #三数之和,垃圾解法#
三数之和
http://www.nowcoder.com/practice/345e2ed5f81d4017bbb8cc6055b0b711
import java.util.*; public class Solution { /* 输入: [-10,0,10,20,-10,-40] 返回值: [[-10,-10,20],[-10,0,10]] */ class Three { int one ; int two ; int three ; Three(int a , int b , int c) { int[] tmp = {a,b,c} ; Arrays.sort(tmp) ; one = tmp[0] ; two = tmp[1] ; three = tmp[2] ; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Three)) return false; Three a = (Three) o; return one == a.one && two == a.two && three == a.three; } @Override public int hashCode() { return Objects.hash(one, two, three); } } public ArrayList<ArrayList<Integer>> threeSum(int[] num) { ArrayList<ArrayList<Integer>> res = new ArrayList<>() ; HashSet<Three> set = new HashSet<>() ; Arrays.sort(num) ; for(int i = 0 ; i < num.length ; i ++) { int shen = 0 - num[i] ; int s = 0 ; int e = num.length - 1 ; while(s < e) { if(s == i) { s ++ ; } else if(e == i) { e -- ; } else { int cur = num[s] + num[e] ; if(cur == shen) { Three th = new Three(num[i] , num[s] , num[e]) ; set.add(th) ; int s_old = num[s] ; while(s < e && num[s] == s_old) { s ++ ; } int e_old = num[e] ; while(s < e && num[e] == e_old) { e -- ; } } else if(cur < shen) { s ++ ; } else { e -- ; } } } } //处理set for(Three t : set) { ArrayList<Integer> ele = new ArrayList<>() ; ele.add(t.one) ; ele.add(t.two) ; ele.add(t.three) ; res.add(ele) ; } return res ; } }
一个菜鸟的算法刷题记录 文章被收录于专栏
分享一个菜鸟的成长记录