您的位置:首页 > 编程语言 > Python开发

leetCode 349号题目详解 两个数组的交集 ,python3两种方式实现, 复杂度分别为O(n^2) 和 O(n)

2018-09-24 14:09 816 查看
[code]给定两个数组,编写一个函数来计算它们的交集。

示例 1:

输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]
示例 2:

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]
说明:

输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序。

原题如上:

第一种暴力方法,双层遍历如代码 复杂度为O(n^2), 数量级标比较大就很慢

[code]class Solution:
def intersection(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
nums1, nums2 = list(set(nums1)), list(set(nums2))
back = []
for num2 in nums2:
if num2 in nums1:
back.append(num2)
return back

if __name__ == "__main__":
a = Solution()

nums1 = [1,3,2]
nums2 = [3,3,4]
print(a.intersection(nums1, nums2))

 

第二种方法, 把第一个数组倒置成一个元组, 就形成了索引, 速度自然就提高了

复杂度分析: 第一个数组遍历一次, 构建索引 复杂度O(n)

                    第二个数组遍历一次, 每次遍历比对第一个数组的key, 如果为1 表示存在,   这里复杂度是O(1)*O(n)

                  总公复杂度是O(n)+O(1)*O(n)  =  2O(n)  =  O(n)

其中要注意的是, 要把第二个list取唯一值才能保证唯一

[code]class Solution:
def intersection(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
nums2 = list(set(nums2))
back = []
dictNums1 = {}
for num1 in nums1:
dictNums1[num1] = 1

for num2 in nums2:
if dictNums1.get(num2) == 1:
back.append(num2)
return back

if __name__ == '__main__':
a = Solution();
print(a.intersection([2,3,1,2,3], [3,2,3,4]))

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐