📣 独立日限时特惠: VIP通行证立减$68
查看: 1761| 回复: 1
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 4Sum n2 解法 求java代码

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
4Sum  n2 解法 求java代码,作为参考

谢谢先

上一篇:谁给分析一下为什么树的前序遍历,空间复杂度是lgN?
下一篇:请教一下我这个解法怎么不对了--UVa 11418 Clever Naming Patterns
🔗
hj867955629 2015-9-22 15:09:09 | 只看该作者
全局:
public class Solution {
    class Pair {
        int fir;
        int sec;
        public Pair(int fir, int sec) {
            this.fir = fir;
            this.sec = sec;
        }
    }
   
    public List<List<Integer>> fourSum(int[] nums, int target) {
        List<List<Integer>> res = new ArrayList<>();
        if (nums.length < 4) {
            return res;
        }
        HashMap<Integer, List<Pair>> hash = new HashMap<>();
        Arrays.sort(nums);
        for (int i = 0; i < nums.length-1; i++) {
            for (int j = i+1; j < nums.length; j++) {
                int sum = nums[i]+nums[j];
                if (!hash.containsKey(sum)) {
                    List<Pair> list = new ArrayList<>();
                    hash.put(sum, list);
                }
                hash.get(sum).add(new Pair(i, j));
            }
        }
        for (int i = 0; i < nums.length-3; i++) {
            if (i != 0 && nums[i] == nums[i-1]) {
                continue;
            }
            for (int j = i+1; j < nums.length-2; j++) {
                if (j != i+1 && nums[j] == nums[j-1]) {
                    continue;
                }
                int target1 = target-nums[i]-nums[j];
                if (!hash.containsKey(target1)) {
                    continue;
                }
                boolean firstAdd = true;
                for (Pair pair: hash.get(target1)) {
                    if (pair.fir <= j) {
                        continue;
                    }
                    if (firstAdd || nums[pair.fir] != res.get(res.size()-1).get(2)) {
                        firstAdd = false;
                        List<Integer> tmp = new ArrayList<>();
                        tmp.add(nums[i]);
                        tmp.add(nums[j]);
                        tmp.add(nums[pair.fir]);
                        tmp.add(nums[pair.sec]);
                        res.add(tmp);
                    }
                }
            }
        }
        return res;
    }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表