1. 程式人生 > >leetcode-探索-初級-陣列-兩個陣列的交集-java

leetcode-探索-初級-陣列-兩個陣列的交集-java

兩個陣列的交集 II

給定兩個陣列,編寫一個函式來計算它們的交集。

示例 1:

輸入: nums1 = [1,2,2,1], nums2 = [2,2]
輸出: [2,2]

示例 2:

輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
輸出: [4,9]

說明:

  • 輸出結果中每個元素出現的次數,應與元素在兩個陣列中出現的次數一致。
  • 我們可以不考慮輸出結果的順序。

進階:

  • 如果給定的陣列已經排好序呢?你將如何優化你的演算法?
  • 如果 nums1 的大小比 nums2 
    小很多,哪種方法更優?
  • 如果 nums2 的元素儲存在磁碟上,磁碟記憶體是有限的,並且你不能一次載入所有的元素到記憶體中,你該怎麼辦?

我的方法:

還是非常簡單:利用java的sort方法進行排序,之後一個一個比較即可

public int[] intersect(int[] nums1, int[] nums2) {
    //我們先排序
    Arrays.sort(nums1);
    Arrays.sort(nums2);
    //兩個數的交集大小一定不會大於小的長度
    int[] temp = new int[Math.min(nums1.length, nums2.length)];
    int index = 0;
    int indexNum1 = 0;
    int indexNum2 = 0;
    for ( ; indexNum1 < nums1.length && indexNum2 < nums2.length; )
        if (nums1[indexNum1] == nums2[indexNum2]) {
            temp[index ++] = nums1[indexNum1];
            indexNum1 ++;
            indexNum2 ++;
        } else if (nums1[indexNum1] > nums2[indexNum2])
            indexNum2 ++;
        else if (nums1[indexNum1] < nums2[indexNum2])
            indexNum1 ++;
        //end if
    //end for
    int[] result = new int[index];
    for (int i = 0 ; i < index ; i ++)
        result[i] = temp[i];
    return result;
 }

關於最佳方法:由於中文網站提交之後的介面看不到(我也不知道為什麼),就直接看了看英文版的,英文版的答題來說和我的方法差不多,就是最後一步利用的是Arrays.copyOf()方法來複制陣列。

以後複製陣列的工作可以交給java提供的方法來進行。