leetcode15 感觉写的好啰嗦,老师有没有什么优化建议,自己想不出来🥹

来源:4-4 使用查找表的经典问题 Two Sum

Llizzzc

2023-10-13

public List<List<Integer>> threeSum(int[] nums) {
    List<List<Integer>> result = new ArrayList<>();
    HashSet<List<Integer>> noRepeat = new HashSet<>();
    HashMap<Integer, List<Integer>> record = new HashMap<>();
    // 记录nums元素
    for (int i = 0; i < nums.length; i ++) {
        if (!record.containsKey(nums[i])) {
            record.put(nums[i], new ArrayList<>());
        }
        record.get(nums[i]).add(i);
    }

    // 搜索三元组
    for (int i = 0; i < nums.length - 2; i ++) {
        for (int j = i + 1; j < nums.length; j ++) {
            int temp = nums[j] + nums[i];
            if (record.containsKey(-temp)) {
                List<Integer> integers = record.get(-temp);
                boolean flag = true;
                for (int integer = 0; integer < integers.size(); integer ++) {
                    if (integers.get(integer) != j && integers.get(integer) != i) {
                        flag = false;
                        break;
                    }
                }
                // 避免重复
               if (!flag) {
                   ArrayList<Integer> list = new ArrayList<>();
                   list.add(nums[i]);
                   list.add(nums[j]);
                   list.add(-temp);
                   Collections.sort(list);
                   if (!noRepeat.contains(list)) {
                       noRepeat.add(list);
                   }
               }
            }
        }
    }

    for (List<Integer> list : noRepeat) {
        result.add(list);
    }
    return result;
}
写回答

1回答

liuyubobobo

2025-02-05

可以参考我的代码思路(C++),有问题可以在针对具体的问题点提问:https://github.com/liuyubobobo/Play-Leetcode/tree/master/0001-0500/0015-3Sum/cpp-0015


继续加油!:)

0
0

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7433 学习 · 1159 问题

查看课程