classSolution{publicint[]intersect(int[]nums1,int[]nums2){Map<Integer,Integer>hashmap=newHashMap<>();for(inti=0;i<nums1.length;i++){//각 숫자의 발생횟수 기록hashmap.put(nums1[i],hashmap.getOrDefault(nums1[i],0)+1);}intk=0;//intersection이 발생하는 갯수for(inti=0;i<nums2.length;i++){if(!hashmap.containsKey(nums2[i]))continue;if(hashmap.get(nums2[i])<=0)continue;//발생횟수가 0이하라는것은 이미 결과 배열에 기록 했다는 의미이다.hashmap.put(nums2[i],hashmap.get(nums2[i])-1);//발생횟수를 1 빼주자. nums1[k++]=nums2[i];if(k>=nums1.length)break;//k가 nums1의 갯수만큼 됬다는건 이 이후에 더 돌아봐야 intersection은 없다는 의미이다. nums1.length < nums2.length 일때 의미 있다.}if(k==nums1.length){returnnums1;}else{int[]result=newint[k];System.arraycopy(nums1,0,result,0,k);returnresult;}}}
Fastest Answer
nums1, nums2를 정렬, 1차 결과를 담을 배열(result)선언 사이즈는 nums1로 하든 nums2로 하든 상관없다.
nums1, nums2를 둘다 다 순회 할때 까지 while
만약 같으면 result에 담고 i, j, k 증가.
만약 nums1이 더 작다면 i만 증가.
최종 결과를 담을 배열(res)선언 1차 결과 배열에서 중첩된 갯수만 최종 결과로 옮겨 담는다.