349. Intersection of Two Arrays --双指针、字典、二分查找、集合
2017-05-15 00:31
381 查看
349. Intersection of Two Arrays
很经典的题目,可以使用双指针、字典、二分查找、集合来实现Given two arrays, write a function to compute their intersection. Example: Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2].
Solution 1: use set operation in python, one-line solution. class Solution(object): def intersection(self, nums1, nums2): """ :type nums1: List[int] :type nums2: List[int] :rtype: List[int] """ return list(set(nums1) & set(nums2)) Solution 2: brute-force searching, search each element of the first list in the second list. (to be more efficient, you can sort the second list and use binary search to accelerate) class Solution(object): def intersection(self, nums1, nums2): """ :type nums1: List[int] :type nums2: List[int] :rtype: List[int] """ res = [] for i in nums1: if i not in res and i in nums2: res.append(i) return res Solution 3: use dict/hashmap to record all nums appeared in the first list, and then check if there are nums in the second list have appeared in the map. class Solution(object): def intersection(self, nums1, nums2): """ :type nums1: List[int] :type nums2: List[int] :rtype: List[int] """ res = [] map = {} for i in nums1: map[i] = map[i]+1 if i in map else 1 for j in nums2: if j in map and map[j] > 0: res.append(j) map[j] = 0 return res Solution 4: sort the two list, and use two pointer to search in the lists to find common elements. class Solution(object): def intersection(self, nums1, nums2): """ :type nums1: List[int] :type nums2: List[int] :rtype: List[int] """ res = [] nums1.sort() nums2.sort() i = j = 0 while (i < len(nums1) and j < len(nums2)): if nums1[i] > nums2[j]: j += 1 elif nums1[i] < nums2[j]: i += 1 else: if not (len(res) and nums1[i] == res[len(res)-1]): res.append(nums1[i]) i += 1 j += 1 return res
相关文章推荐
- 【疑问】leetcode - 658. Find K Closest Elements【二分查找 + 双指针 + 找最近】
- 在无序集合的递归二分查找
- 集合A-B--二分查找
- ssl1125-集合【哈希表&二分查找+快排】
- 二分查找 数组和指针方法
- 对整数数组进行二分查找;传数组指针会丢失数组大小信息。
- 使用c语言指针和递归方法实现二分查找
- sdut2123 查找练习 hash——出现过的数字(二分,字典)
- 167. Two Sum II - Input array is sorted -- 双指针、字典、二分搜索
- 随机生成1024个数,用指针进行排序,并实现二分查找
- leetcode 209. Minimum Size Subarray Sum-子序列最小长度|双指针|二分查找
- 随机生成1024个数,用指针进行排序,并实现二分查找
- 随机生成1024个数,用指针进行排序,并实现二分查找
- 【Hash】【二分查找】17.6.3 集合 题解
- 随机生成1024个数,用指针进行排序,并实现二分查找
- 分治思想 - 二分搜索技术 - MATLAB代码 list是数据集合,x是要查找的数据。
- 精通cobol--9.8.2 如何进行二分查找方式
- swift关于枚举 字典 集合的一些整理
- 二分查找
- P - M--二分查找