LeetCode-in-Java

2541. Minimum Operations to Make Array Equal II

Medium

You are given two integer arrays nums1 and nums2 of equal length n and an integer k. You can perform the following operation on nums1:

nums1 is said to be equal to nums2 if for all indices i such that 0 <= i < n, nums1[i] == nums2[i].

Return the minimum number of operations required to make nums1 equal to nums2. If it is impossible to make them equal, return -1.

Example 1:

Input: nums1 = [4,3,1,4], nums2 = [1,3,7,1], k = 3

Output: 2

Explanation: In 2 operations, we can transform nums1 to nums2.

1st operation: i = 2, j = 0. After applying the operation, nums1 = [1,3,4,4].

2nd operation: i = 2, j = 3. After applying the operation, nums1 = [1,3,7,1]. One can prove that it is impossible to make arrays equal in fewer operations.

Example 2:

Input: nums1 = [3,8,5,2], nums2 = [2,4,1,6], k = 1

Output: -1

Explanation: It can be proved that it is impossible to make the two arrays equal.

Constraints:

Solution

import java.util.Arrays;

public class Solution {
    public long minOperations(int[] nums1, int[] nums2, int k) {
        int n = nums1.length;
        long pcnt = 0;
        long ncnt = 0;
        if (k == 0) {
            if (Arrays.equals(nums1, nums2)) {
                return 0;
            } else {
                return -1;
            }
        }
        for (int i = 0; i < n; i++) {
            int tp = nums1[i] - nums2[i];
            if (tp % k != 0) {
                return -1;
            }
            if (tp > 0) {
                pcnt += tp;
            } else if (tp < 0) {
                ncnt += tp;
            }
        }
        if (pcnt + ncnt != 0) {
            return -1;
        }
        return pcnt / k;
    }
}