3 Sum

来源:互联网 发布:三年php工作经验简历 编辑:程序博客网 时间:2024/05/21 00:17
    public ArrayList<ArrayList<Integer>> threeSum(int[] num) {        // Start typing your Java solution below        // DO NOT write main() function        Arrays.sort(num);        ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();        if(num.length < 3) return result;        for(int i = 0; i < num.length - 2 && num[i] <= 0; i++) {            if(i > 0 && num[i] == num[i - 1]) continue; //skip the duplicate, pay attention here            int start = i + 1;             int end = num.length - 1;            while(start < end && num[end] >= 0) {                if(num[i] + num[start] + num[end] == 0) {                    ArrayList<Integer> sub = new ArrayList<Integer>(3);                    sub.add(num[i]);                    sub.add(num[start++]);                    sub.add(num[end--]);                    result.add(sub);                    //pay attention here, skip the duplicate                    while(start < end && num[start] == num[start - 1]) start++;                    while(start < end && num[end] == num[end + 1]) end--;                }else if(num[i] + num[start] + num[end] > 0) {                    end--;                }else {                    start++;                }            }        }        return result;    }    public ArrayList<ArrayList<Integer>> threeSum(int[] num) {        // Start typing your Java solution below        // DO NOT write main() function        Arrays.sort(num);          ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();          Set<ArrayList<Integer>> set = new HashSet<ArrayList<Integer>>();        if(num.length < 3) return result;          for(int i = 0; i < num.length - 2 && num[i] <= 0; i++) {              int start = i + 1;               int end = num.length - 1;              while(start < end && num[end] >= 0) {                  if(num[i] + num[start] + num[end] == 0) {                      ArrayList<Integer> sub = new ArrayList<Integer>(3);                      sub.add(num[i]);                      sub.add(num[start++]);                    sub.add(num[end--]);                    set.add(sub);                }else if(num[i] + num[start] + num[end] > 0) {                      end--;                  }else {                      start++;                  }              }          }          result.addAll(set);        return result;       }

原创粉丝点击