Dadas dos matrices, escribe una función para calcular su intersección.
Ejemplo:
Dado nums1 = [1, 2, 2, 1], nums2 = [2, 2], regreso [2, 2].
Solución Java 1
public int[] intersect(int[] nums1, int[] nums2) { HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); for(int i: nums1){ if(map.containsKey(i)){ map.put(i, map.get(i)+1); }else{ map.put(i, 1); } } ArrayList<Integer> list = new ArrayList<Integer>(); for(int i: nums2){ if(map.containsKey(i)){ if(map.get(i)>1){ map.put(i, map.get(i)-1); }else{ map.remove(i); } list.add(i); } } int[] result = new int[list.size()]; int i =0; while(i<list.size()){ result[i]=list.get(i); i++; } return result; } |
Solución Java 2
Si las matrices están ordenadas, entonces podemos usar dos puntos.
public int[] intersect(int[] nums1, int[] nums2) { Arrays.sort(nums1); Arrays.sort(nums2); ArrayList<Integer> list = new ArrayList<Integer>(); int p1=0, p2=0; while(p1<nums1.length && p2<nums2.length){ if(nums1[p1]<nums2[p2]){ p1++; }else if(nums1[p1]>nums2[p2]){ p2++; }else{ list.add(nums1[p1]); p1++; p2++; } } int[] result = new int[list.size()]; int i=0; while(i<list.size()){ result[i]=list.get(i); i++; } return result; } |