两个数组的交|两个数组的交 (lintcode:intersection-of-two-arrays) (lintcode:intersection-of-two-arrays-ii)
题一:
返回两个数组的交,结果中的每个元素必须是唯一的,答案可以以任意顺序给出。
def intersection(self, nums1, nums2):
# write your code here
nums1 = set(nums1)
nums2 = set(nums2)
nums = nums1 & nums2
nums = list(nums)
return nums
题二:
计算两个数组的交,每个元素出现次数得和在数组里一样,答案可以以任意顺序给出。
一个错误的方法:
def intersection(nums1, nums2):
nums = [i for i in nums1 if i in nums2]
return numsnums1 = [1, 2, 2, 1]
nums2 = [2]
print intersection(nums1, nums2)
输出应该是
[2]
,但得到得却是 [2, 2]
。【两个数组的交|两个数组的交 (lintcode:intersection-of-two-arrays) (lintcode:intersection-of-two-arrays-ii)】网上经常出现这个,或思路类似的方法。
正确的方法:
def intersection(nums1, nums2):
nums1, nums2 = sorted(nums1), sorted(nums2)
p1 = p2 = 0
nums = []
while p1 < len(nums1) and p2 < len(nums2):
if nums1[p1] < nums2[p2]:
p1 += 1
elif nums1[p1] > nums2[p2]:
p2 += 1
else:
nums += nums1[p1],
p1 += 1
p2 += 1
return nums
思路,排序,双指针。
lintcode 原题1
lintcode 原题2
正确方法的出处
20180202
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量