【leetcode初級算法JS實現】5.兩個數組的交集 II

在這裏插入圖片描述

// 解法1:
// 先判斷某個數組是否是空,是的話交集就是[];
// 判斷哪個數組的長度比較小,小的數組來遍歷
// 遍歷的過程中,如果發現相等,就存起來,並且刪除長數組對應的元素 
/**
 * @param {number[]} nums
 * @return {number}
 * /**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersect = function(nums1, nums2) {
    if( nums1.length === 0 || nums2.length === 0 ) return [];
    if (nums1.length < nums2.length) [nums1, nums2] = [nums2, nums1];
    for(let i = 0; i< nums1.length; i++){
        let temp = nums1[i];
        if(nums2.includes(nums1[i])) {
            result.push(nums1[i])
            let index =  getIndex(nums2, nums1[i]);
            nums2.splice(index, 1);
        }
    }
    return result;
};

function getIndex(arr, num){
    for(let i = 0; i< arr.length; i++){
        if(arr[i] === num) {
            return i;
        }
    }
    return -1;
}
 */

// 解法2:
// 其實思路跟上面的差不多,但是就沒有比較長短,而且用indexOf直接獲得數組下標
/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersect = function(nums1, nums2) {
    let result = [];
    for(let i = 0; i< nums1.length; i++){
        let temp = nums1[i];
        if(nums2.indexOf(nums1[i]) !== -1) {
            let index =  nums2.indexOf(nums1[i]);
            result.push(nums1[i])
            nums2.splice(index, 1);
        }
    }
    return result;
};
// 解法3: 使用指針
// 將兩個數組進行排序,並使用兩個指針
// while循環,在內部循環時:
// 如果兩個相等,則存儲起來,並且兩個指針都向前移動一位;
// 如果不相等,因爲大元素可能在小元素數組裏存在,但是小元素在大元素所在數組肯定不存在
// 所以如果nums1[p1] < nums2[p2], 則p1向前移動一位;
// 否則p2移動一位
/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersect = function(nums1, nums2) {
    if( nums1.length === 0 || nums2.length === 0 ) return [];
    let p1 = 0;
    let p2 = 0;
    let result = [];
    nums1.sort();
    nums2.sort();
    while(p1 < nums1.length && p2 < nums2.length){
        if(nums1[p1] == nums2[p2]) {
            result.push(nums1[p1])
            p1++
            p2++
        } else if(nums1[p1] < nums2[p2]) {
            p1++
        } else {
            p2++
        }
    }
    return result;
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章