LeetCode-2つの配列の交差II【Java|LeetCode初級】


2つの配列を指定し、関数を記述して交差を計算します.
例1:
  : nums1 = [1,2,2,1], nums2 = [2,2]
  : [2,2]

例2:
  : nums1 = [4,9,5], nums2 = [9,4,9,8,4]
  : [4,9]

説明:
  • 出力結果の各要素の出現回数は、要素が2つの配列に現れる回数と一致する必要があります.
  • 出力結果の順序を考慮しなくてもいいです.

  • ステップ:
  • 与えられた配列が順序付けされている場合?アルゴリズムをどのように最適化しますか?
  • nums 1のサイズがnums 2よりずっと小さい場合、どの方法が優れていますか?
  • nums 2の要素がディスクに格納されている場合、ディスクメモリは限られており、すべての要素を一度にメモリにロードすることはできません.どうすればいいですか?

  • 解答の構想:まず配列を並べ替えて、それから2つのカーソルを使って再検査の操作を行います
    class Solution {
        public int[] intersect(int[] nums1, int[] nums2) {
            Arrays.sort(nums1);
            Arrays.sort(nums2);
            
            List tmp = new ArrayList();
    
            int index = 0;
            
            int len1 = 0;//        
            int len2 = 0;//        
            
            while(len1 < nums1.length && len2 < nums2.length){
                if(nums1[len1] == nums2[len2]){
                    tmp.add(nums1[len1]);
                    len1++;
                    len2++;
                    index++;
                }else if(nums1[len1] < nums2[len2]){
                    len1++;
                }else{
                    len2++;
                }
            }
            
            int[] result = new int[tmp.size()]; 
            for (int k = 0; k < result.length; k++){ 
                result[k] = tmp.get(k); 
            } 
            return result;
        }
        
    }

    未完待機・・・