LeetCode in Kotlin

3132. Find the Integer Added to Array II

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:

Solution

@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
    }
}