资讯详情

千问 LeetCode 454. 四数相加 II Java实现

📅 2026/10/31 2:05:55 | 华诺云谱 👁 阅读
千问    LeetCode 454. 四数相加 II Java实现
这道题用分组 哈希表最稳把四数之和拆成两组两数之和避免 O(n⁴) 暴力。Java 实现class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {MapInteger, Integer sumMap new HashMap();// 统计 nums1[i] nums2[j] 的所有和及其出现次数 for (int a : nums1) { for (int b : nums2) { int sum a b; sumMap.put(sum, sumMap.getOrDefault(sum, 0) 1); } } int count 0; // 找 -(c d) 是否在前面出现过 for (int c : nums3) { for (int d : nums4) { count sumMap.getOrDefault(-(c d), 0); } } return count; }}思路要点nums1[i] nums2[j] nums3[k] nums4[l] 0等价于nums1[i] nums2[j] -(nums3[k] nums4[l])所以先枚举前两个数组的所有两两之和记录次数再枚举后两个数组看它们的和的相反数在前面出现过多少次。复杂度维度 复杂度时间 O(n²)空间 O(n²)面试易错点不是去重题题目问的是元组个数所以相同和要累加次数不能只存是否存在。不要和 LeetCode 18. 四数之和混淆那道题是单数组、需要去重通常用排序 双指针这题是四个独立数组用哈希分组更合适。取相反数写清楚用 -(c d) 或 -c - d 都可以注意括号优先级。HashMap 用 getOrDefault比 containsKey 再 get 更简洁也少写 bug。这道题很适合和 LeetCode 1. 两数之和、LeetCode 18. 四数之和 放在一起对比能看出“哈希降维”和“排序去重”两种常见套路。需要我接着为你讲解 LeetCode 18. 四数之和 的 Java 实现吗
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑