1. 哈希表实战:从四数相加到三数之和的算法精解
哈希表是算法面试中的常客,也是解决特定问题的利器。今天我想分享几个经典哈希表问题的解法,包括四数相加II、赎金信、三数之和和四数之和。这些题目看似简单,但其中蕴含着许多值得深思的细节和优化技巧。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 454.四数相加II:哈希表的经典应用
2.1 问题分析与思路
四数相加II的问题描述很简单:给定四个整数数组nums1、nums2、nums3、nums4,计算有多少个元组(i,j,k,l)满足nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0。
最直观的暴力解法是四重循环,时间复杂度为O(n^4),这在n=200时就已经达到了1,600,000,000次运算,显然不可行。
2.2 哈希表优化方案
我们可以将问题拆分为两部分:
- 先计算nums1和nums2中所有可能的和,并统计每个和出现的次数
- 然后计算nums3和nums4中所有可能的和,查找其相反数是否在第一步的哈希表中
python复制class Solution:
def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:
record = dict()
count = 0
for i in nums1:
for j in nums2:
sum_ij = i + j
record[sum_ij] = record.get(sum_ij, 0) + 1
for k in nums3:
for q in nums4:
target = -(k + q)
if target in record:
count += record[target]
return count
2.3 复杂度分析
时间复杂度:O(n^2),因为我们有两组双重循环
空间复杂度:O(n^2),最坏情况下nums1和nums2的所有和都不相同
提示:在实际面试中,解释清楚为什么选择这种分治策略很重要。哈希表在这里的作用是"记忆"前两个数组的和,避免重复计算。
3. 383.赎金信:字符统计的艺术
3.1 问题理解
赎金信问题要求判断杂志(magazine)中的字符是否可以构成赎金信(ransomNote),注意是字符的数量也要足够。
3.2 三种解法对比
3.2.1 直接统计法
python复制def canConstruct(self, ransomNote: str, mag
