Medium
You are given two integer arrays nums1
and nums2
.
From nums1
two elements have been removed, and all other elements have been increased (or decreased in the case of negative) by an integer, represented by the variable x
.
As a result, nums1
becomes equal to nums2
. Two arrays are considered equal when they contain the same integers with the same frequencies.
Return the minimum possible integer x
that achieves this equivalence.
Example 1:
Input: nums1 = [4,20,16,12,8], nums2 = [14,18,10]
Output: -2
Explanation:
After removing elements at indices [0,4]
and adding -2, nums1
becomes [18,14,10]
.
Example 2:
Input: nums1 = [3,5,5,3], nums2 = [7,7]
Output: 2
Explanation:
After removing elements at indices [0,3]
and adding 2, nums1
becomes [7,7]
.
Constraints:
3 <= nums1.length <= 200
nums2.length == nums1.length - 2
0 <= nums1[i], nums2[i] <= 1000
x
such that nums1
can become equal to nums2
by removing two elements and adding x
to each element of nums1
.@Suppress("NAME_SHADOWING")
class Solution {
fun minimumAddedInteger(nums1: IntArray, nums2: IntArray): Int {
nums1.sort()
nums2.sort()
return if (checkOk(nums1, nums2, 2)) {
nums2[0] - nums1[2]
} else if (checkOk(nums1, nums2, 1)) {
nums2[0] - nums1[1]
} else {
nums2[0] - nums1[0]
}
}
private fun checkOk(nums1: IntArray, nums2: IntArray, start: Int): Boolean {
var start = start
var i = 0
val diff = nums2[i] - nums1[start]
while (i < nums2.size) {
if (start - i > 2) {
return false
}
if (nums2[i] == nums1[start] + diff) {
i++
}
start++
}
return i == nums2.size
}
}