ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

LeetCode 350. 两个数组的交集 II|Python 解法详解

LeetCode 350. 两个数组的交集 II|Python 解法详解 LeetCode 350. 两个数组的交集 IIPython 解法详解CSDN 算法专题 · 数组与哈希表 | 难度简单题目信息题号350难度简单LeetCode题目链接题目描述返回两个数组的交集每个元素出现次数应等于它在两个数组中出现次数的较小值。示例输入nums1 [1,2,2,1], nums2 [2,2] 输出[2,2]约束数组长度不超过 1000。解题思路核心观察统计较短数组的元素频次再扫描另一个数组。若当前值剩余次数大于 0就加入答案并把次数减一从而严格控制重复数量。推导与执行步骤统计一个数组的频次扫描另一个数组命中正频次时加入结果对应计数减一为什么这个方法正确算法始终围绕上述核心观察维护有效状态并且每一步只排除已经能够证明不可能产生更优答案的情况。按照执行步骤处理后所有可能影响答案的元素或节点都会被恰好检查因此不会遗漏合法答案状态更新又严格遵守题目约束所以最终结果有效。从边界看空区间、单个元素、全部相同或完全不匹配等情况都会落入初始化条件或循环终止条件不需要依赖未定义状态。实现时再重点检查下标、空节点和重复元素即可保证算法在极端输入下仍然成立。Python 代码# 解法核心统计较短数组的元素频次再扫描另一个数组。若当前值剩余次数大于 0就加入答案并把次数减一从而严格控制重复数量。# 实现步骤# 1. 统计一个数组的频次# 2. 扫描另一个数组# 3. 命中正频次时加入结果# 4. 对应计数减一fromcollectionsimportCounterfromtypingimportListclassSolution:defintersect(self,nums1:List[int],nums2:List[int])-List[int]:iflen(nums1)len(nums2):nums1,nums2nums2,nums1 countsCounter(nums1)# 频次表记录每个元素还可以匹配多少次result[]# 保存最终答案forvalueinnums2:ifcounts[value]0:result.append(value)counts[value]-1returnresult复杂度分析时间复杂度O(nm)空间复杂度O(min(n,m))易错点不能直接使用集合否则会丢失重复次数。总结这道题的关键是统计较短数组的元素频次再扫描另一个数组。理解这一点后再结合边界条件检查代码就能保持清晰且稳定。
返回列表