Data Structure I 筆記撰寫計畫
敘述
這是 Data Structure I
的第三天第一個題目,總共有兩個。
傳入兩個陣列,回傳這兩個陣列的交集,回傳值不用排序。
限制:
1 <= nums1.length, nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 1000
Example 1:
1 2
| Input: nums1 = [1,2,2,1], nums2 = [2,2] Output: [2,2]
|
Example 2:
1 2 3
| Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4] Output: [4,9] Explanation: [9,4] is also accepted.
|
筆記
使用 Two Pointers 就可以解決這個問題。
- 把兩個陣列排序好
- 找出比較小的那個陣列,為主要陣列
mainArr
(主要陣列跑完就可以得到所有答案了),另一個為比較陣列 compArr
- 比較指標
- 如果指標相同,那就把值加進 Result ,然後把兩個指標都往後推一位。
- 如果
mainArr
值比較大,那就把 compArr
加一,然後把迴圈加一(因為主要陣列的值沒有用到)然後繼續比較。
- 相反亦同,但是不用把迴圈加一了, 因為這是比較用的陣列。
程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
var intersect = function (nums1, nums2) { var mainIndex = 0, compIndex = 0; var resultArr = [];
nums1 = nums1.sort((a, b) => { return a - b; }); nums2 = nums2.sort((a, b) => { return a - b; });
if (nums1.length < nums2.length) { for (var i = 0; i < nums1.length; i++) { if (nums1[mainIndex] === nums2[compIndex]) { resultArr.push(nums1[mainIndex]); mainIndex += 1; compIndex += 1; } else if (nums1[mainIndex] > nums2[compIndex]) { compIndex += 1; i--; } else if (nums1[mainIndex] < nums2[compIndex]) { mainIndex += 1; } } } else { for (var j = 0; j < nums2.length; j++) { if (nums2[mainIndex] === nums1[compIndex]) { resultArr.push(nums2[mainIndex]); mainIndex += 1; compIndex += 1; } else if (nums2[mainIndex] > nums1[compIndex]) { compIndex += 1; j--; } else if (nums2[mainIndex] < nums1[compIndex]) { mainIndex += 1; } } } return resultArr; };
|
成績