leetcode-探索-初級-陣列-兩個陣列的交集-java
阿新 • • 發佈:2018-12-30
兩個陣列的交集 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提供的方法來進行。