---
# System prepended metadata

title: LC 3132. Find the Integer Added to Array II
tags: [medium, leedcode, c++]

---

# LC 3132. Find the Integer Added to Array II

### [Problem link](https://leetcode.com/problems/find-the-integer-added-to-array-ii/)

###### tags: `leedcode` `medium` `c++`

You are given two integer arrays <code>nums1</code> and <code>nums2</code>.

From <code>nums1</code> 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 <code>x</code>.

As a result, <code>nums1</code> becomes  **equal**  to <code>nums2</code>. Two arrays are considered  **equal**  when they contain the same integers with the same frequencies.

Return the  **minimum**  possible integer <code>x</code> 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 <code>[0,4]</code> and adding -2, <code>nums1</code> becomes <code>[18,14,10]</code>.

**Example 2:** 

Input: nums1 = [3,5,5,3], nums2 = [7,7]

Output: 2

Explanation:

After removing elements at indices <code>[0,3]</code> and adding 2, <code>nums1</code> becomes <code>[7,7]</code>.


 **Constraints:** 

- <code>3 <= nums1.length <= 200</code>
- <code>nums2.length == nums1.length - 2</code>
- <code>0 <= nums1[i], nums2[i] <= 1000</code>
- The test cases are generated in a way that there is an integer <code>x</code> such that <code>nums1</code> can become equal to <code>nums2</code> by removing two elements and adding <code>x</code> to each element of <code>nums1</code>.

## Solution 1
#### C++
```cpp=
class Solution {
public:
    int minimumAddedInteger(vector<int>& nums1, vector<int>& nums2) {
        sort(nums1.begin(), nums1.end());
        sort(nums2.begin(), nums2.end());

        for (int idx1 = 2; idx1 >= 0; idx1--) {
            int diff = nums2[0] - nums1[idx1];
            int idx2 = 0;  // idx of nums2
            for (int j = idx1; j < nums1.size(); j++) {
                if (nums1[j] + diff == nums2[idx2]) {
                    idx2++;
                    if (idx2 == nums2.size()) {
                        return diff;
                    }                
                }
            }
        }
        return -1;
    }
};
```

>### Complexity
>n = nums1.length
>|             | Time Complexity | Space Complexity |
>| ----------- | --------------- | ---------------- |
>| Solution 1  | O(nlogn)        | O(1)             |

## Note
sol1:
將num1 與 num2排序過後, num1刪除兩個元素後的第一個元素一定在原本num1的第0個, 第1個或第2個中, 那就拿這三個當頭, 去尋找後續的數組中存不存在subarray == num2.

那因為num1已經排序過, 所以從第2個元素當開頭讓diff最小, 如果第二個元素當頭後有subarray == num2, 那就直接return.
[yt 解說](https://www.youtube.com/watch?v=8tIcs3Zha9M)
