두 배열의 교차점 - II
4140 단어 arraysleetcodedatastructurejava
팔로우: |
방법 1: 이미지 설명이 포함된 2점 접근 방식( https://leetcode.com/problems/intersection-of-two-arrays-ii/discuss/954800/Java-solution-with-explanation-and-pictures )
방법 2: 빈도 HashMap 사용
learn about
creating Frequency HashMaps : Frequency Hashmaps are created using :
if (charCountMap.containsKey(c)) {
// If char is present in charCountMap,
// incrementing it's count by 1
charCountMap.put(c, charCountMap.get(c) + 1);
}
else {
// If char is not present in charCountMap,
// putting this char to charCountMap with 1 as it's value
charCountMap.put(c, 1);
}
}
솔루션은 다음과 같이 제공될 수 있습니다. 여기서 두 개의 해시맵을 생성하고 발생 빈도를 입력하고 비교합니다.
class Solution (
public int[] intersect(int[] nums1, int[] nums2) {
List<Intger> arr = new ArrayList<Integer>();
HashMap<integer,Integer> mapl =new HashMap<> ();
HashMap<Integer,Integer> map2 = new HashMapc>();
for(int i =0; i < nums1.length; i++)(
if(map1.containskey(nums1[i]))
map1.put(nums1[i), maps.get (nums1[i]) +1);
else
maps1.put (nums1[i], 1);
for (int i=0; i<nums2.length; i++){
if(maps2.containskey(nums2[i]))
maps2.put (nums2[i], maps.get(nums2[i]) +1);
else
maps2.put (nums2[i], 1);
//if key of hashmap2 is present in hashmap1 then
//find the minimum frequency of character between these has maps
for(Integer key: map1.keyset ())(
if(map2.containskey(key)){
int x= Math.min(map2.get(key), mapl.get (key));
while(x-- > 0){
arr.add(key);
//converting list to array
int result[] - new int [arr.size()];
for(int i 0; i carr.size(); i++)
result[1] - arr.get(1);
return result;
방법 3: 하나의 HashMap 사용: solution
하나의 HashMap 메서드를 두 개 대신 사용할 수도 있으며 HashMap의 빈도 속성을 사용합니다.
우리가 기억해야 할 유일한 점은 nums1[]에서와 같이 빈도를 해당 횟수만큼만 등록하려고 하므로 nums2[] 해시맵에서 빈도 수를 줄이는 것입니다.
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
HashMap<Integer,Integer> map= new HashMap<Integer,Integer>();
ArrayList<Integer> ans= new ArrayList<Integer>();
for ( int i = 0 ; i < nums1.length; i++){
//frequency counter: charCountMap.put(c, charCountMap.get(c) + 1);
if(map.containsKey(nums1[i]))
map.put(nums1[i],map.get(nums1[i])+1);
else map.put(nums1[i],1);
}
for (int i = 0 ; i <nums2.length; i++){
if(map.containsKey(nums2[i]) && map.get(nums2[i]) > 0){
map.put(nums2[i],map.get(nums2[i])-1);
ans.add(nums2[i]);
}
}
// Now we just turn our list into an array using get method and return.
int[] result = new int[ans.size()];
for (int i = 0 ; i <ans.size(); i++){
result[i] = ans.get(i);
}
return result;
}
}
참고 자료:
Different ways of converting Lists to Arrays: .get method, list.toArray(myArray)
Reference
이 문제에 관하여(두 배열의 교차점 - II), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/insanity_xi/intersection-of-two-arrays-ii-373p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)