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
}