leetcode:3Sum

来源:互联网 发布:琪琪影院软件下载 编辑:程序博客网 时间:2024/06/05 15:29


用Hash的方法,标记一下下标跟数量


public class Solution {    public List<List<Integer>> threeSum(int[] num) {        List<List<Integer>> ans = new ArrayList<>();        if(num != null && num.length >= 3){            Arrays.sort(num);            HashMap<Integer, Integer> map = new HashMap<>();            HashMap<Integer, Integer> pointer = new HashMap<>();            for(int i = 0; i < num.length; ++i){                Integer count = map.get(num[i]);                if(count == null){                    count = 0;                    pointer.put(num[i], i);                }                map.put(num[i], count + 1);            }            // List<Integer> l = new ArrayList<>(4);            int zero = 0;            for(int i = 0, j = i + 1; i < num.length; ){                j = i + 1;                while(j < num.length){                    int remain = zero - num[i] - num[j];                    Integer count = map.get(remain);                    boolean flag = false;                    if(count != null){                        int site = pointer.get(remain);                        if(site > j){                            flag = true;                        }                        else if(site == j && count >= 2){                            flag = true;                        }                        if(flag){                            List<Integer> l = new ArrayList<>();                            l.add(num[i]);l.add(num[j]);l.add(remain);                            ans.add(l);                        }                    }                    while( ++j < num.length && num[j] == num[j - 1]);                }                while( ++i < num.length && num[i] == num[i - 1]);            }            if(map.get(0) != null && map.get(0) >= 3){                List<Integer> l = new ArrayList<>();                l.add(0);l.add(0);l.add(0);                ans.add(l);            }                    }        return ans;    }}


0 0
原创粉丝点击