【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;
};

猜你喜欢

转载自blog.csdn.net/qq_34086980/article/details/106413866