LeetCode——数组:两个数组的交集 II

原题

给定两个数组,写一个方法来计算它们的交集。

例如:
给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].

注意:

  •    输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
  •    我们可以不考虑输出结果的顺序。

跟进:

  • 如果给定的数组已经排好序呢?你将如何优化你的算法?
  • 如果 nums1 的大小比 nums2 小很多,哪种方法更优?
  • 如果nums2的元素存储在磁盘上,内存是有限的,你不能一次加载所有的元素到内存中,你该怎么办


个人编程水平不高,没有做跟进的题目。

代码如下:

public int[] intersect(int[] nums1, int[] nums2) {
		 
		/*
	        思路使用两个HashMap来辅助,将nums1中的元素与nums2中的元素比较,相等的话分别将数组的索引和对应的值添加到hs3和hs4中,
	        因为要避免重复,需要在if()里面判断这两HashMap中是否已存有这两数组的键值
	      */
		HashMap<Integer,Integer> hs3 = new HashMap<Integer,Integer>();
		HashMap<Integer,Integer> hs4 = new HashMap<Integer,Integer>();
		

		for(int i = 0; i < nums1.length; i++) {
			for(int j = 0; j < nums2.length; j++) {
				if(nums1[i] == nums2[j] && !hs3.containsKey(i) && !hs4.containsKey(j)) {
					hs3.put(i, nums1[i]);
					hs4.put(j, nums2[j]);
				}
			}
		}
		
		ArrayList<Integer> al = new ArrayList<Integer>(hs3.values());
		int[] ts = new int[al.size()];
		for(int i = 0; i < al.size(); i++) {
			ts[i] = al.get(i);
		}
		
		return ts;
		
	 }
提供一种解题思路,也方便日后回顾和改进。

猜你喜欢

转载自blog.csdn.net/zxf15735185131/article/details/80808875