【leetcode】3132.找出与数组相加的整数 II

72 阅读1分钟

leetcode-3132.png

3131进阶版,在nums1中删除两个元素之后,找到x,使其满足nums1[i] + nums[i] = x

首先要对两个数组进行排序,排序过后,便于进行比较
第一步,寻找x,在nums1中的每个元素与nums2[0](最小)比较
第二步,在nums1数组中寻找是否存在多个(nums2.length)元素满足条件(23行)

var minimumAddedInteger = function (nums1, nums2) {
    nums1.sort((a, b) => a - b)
    nums2.sort((a, b) => a - b)

    let len = nums1.length

    let res = Infinity
    for (let i = 0; i < len; ++i) {
        // 用 nums2 中最小的来进行比较
        let x = nums2[0] - nums1[i]
        if(isVaild(nums1, nums2, x)){
            // 选出最小的 res
            res = Math.min(res, x)
        }
    }
    return res
};
var isVaild = function(nums1, nums2, x){
    let remove = 0
    let j = 0
    for(let i = 0; i < nums1.length; ++i){
        // 逐个进行比较
        if(nums1[i] + x === nums2[j]){
            // 满足条件
            // 就都跳到下一个进行计算,x如果也适用于下一个,那么就可以逐步把nums走完
            j++
            if(j === nums2.length) break
        }else{
            // 不满足条件的个数
            remove++
        }
    }
    return remove <= 2
}