350. Intersection of Two Arrays II
class Solution{ public int[] intersect(int[] nums1, int[] nums2){ Map<Integer, Integer> map = new HashMap<>(); List<Integer> list = new ArrayList<>(); for(int i = 0; i < nums1.length; i++){ if(!map.containsKey(nums1[i])){ map.put(nums1[i], 1); }else{ map.put(nums1[i], map.get(nums1[i]) + 1); } } for(int i = 0; i < nums2.length; i++){ if(map.containsKey(nums2[i]) && map.get(nums2[i]) > 0){ list.add(nums2[i]); map.put(nums2[i], map.get(nums2[i])-1); } } int[] result = new int[list.size()]; for(int i = 0; i < list.size(); i++){ result[i] = list.get(i); } return result; } }
// 谁小移谁 Arrays.sort(nums1); Arrays.sort(nums2); int pnt1 = 0; int pnt2 = 0; ArrayList<Integer> myList = new ArrayList<Integer>(); while((pnt1 < nums1.length) &&(pnt2< nums2.length)){ if(nums1[pnt1]<nums2[pnt2]){ pnt1++; } else{ if(nums1[pnt1]>nums2[pnt2]){ pnt2++; } else{ myList.add(nums1[pnt1]); pnt1++; pnt2++; } } } int[] res = new int[myList.size()]; for(int i = 0; i<res.length; i++){ res[i] = (Integer)myList.get(i); } return res;
Note:
- Each element in the result should appear as many times as it shows in both arrays.
- The result can be in any order.
Follow up:
- What if the given array is already sorted? How would you optimize your algorithm?
- What if nums1's size is small compared to nums2's size? Which algorithm is better?
- What if elements of nums2 are stored on disk, and the memory is limited such that you cannot load all elements into the memory at once?
Given two arrays, write a function to compute their intersection.
Example 1:
Input: nums1 = [1,2,2,1], nums2 = [2,2]
Output: [2,2]
Example 2:
Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
Output: [4,9]
posted on 2018-07-18 08:51 猪猪🐷 阅读(116) 评论(0) 收藏 举报
浙公网安备 33010602011771号