💨

Algorithm and Data Structure勉強 01-Frequency Problem

2021/12/28に公開

Problem Description

Write a function that two arrays as parameters,and then return an array that is the intersection of these two arrays.For example,Interscrion([1,2,3],[7,3,4,1])should return [1,3].

直感的に、配列中にひとつずつを探す、同じの数字をまとめると、解決でき思う。

解答一

function interaction(arr1, arr2){
   let result = []
   for(let i=0;i < arr1.length;i++){
     for(let j=0;j < arr1.length;j++){
	if(arr1[i] === arr2[j]){
	  result.push(arr1[i]);
	}
     }
   }
   console.log(result);
   return result;
}
interaction([1,2,3],[5,6,3,4,5])

しかし、複雑度O(n*m)、そして、別の早方法が探そう。
まず、配列の数字を計数し、複数以上の数字まとめば、これが結果と思う。

解答二

function interaction(arr1,arr2){
  let result = [];
  let arr3 = arr1.concat(arr2);
  let counter = {};
  
  for(let i=0;i < arr3.length;i++){
    if(!counter[arr3[i]]){
      counter[arr3[i]] = 1;
    }else{
      counter[arr3[i]]++;
    }
  }
  
  for(let property in counter){
   if(counter[property] >= 2){
     result.push(property);
   }
  }
  console.log(result);
  return result;
}

複雑度O(n+m)をなります。

Discussion