Skip to content

Latest commit

 

History

History

2918

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

You are given two arrays nums1 and nums2 consisting of positive integers.

You have to replace all the 0's in both arrays with strictly positive integers such that the sum of elements of both arrays becomes equal.

Return the minimum equal sum you can obtain, or -1 if it is impossible.

 

Example 1:

Input: nums1 = [3,2,0,1,0], nums2 = [6,5,0]
Output: 12
Explanation: We can replace 0's in the following way:
- Replace the two 0's in nums1 with the values 2 and 4. The resulting array is nums1 = [3,2,2,1,4].
- Replace the 0 in nums2 with the value 1. The resulting array is nums2 = [6,5,1].
Both arrays have an equal sum of 12. It can be shown that it is the minimum sum we can obtain.

Example 2:

Input: nums1 = [2,0,2,0], nums2 = [1,4]
Output: -1
Explanation: It is impossible to make the sum of both arrays equal.

 

Constraints:

  • 1 <= nums1.length, nums2.length <= 105
  • 0 <= nums1[i], nums2[i] <= 106

Hints:

  • Consider we replace all the 0’s with 1’s on both arrays, the answer will be -1 if there was no 0 in the array with the smaller sum of elements.
  • Otherwise, how can you update the value of exactly one of these 1’s to make the sum of the two arrays equal?
  • Consider we replace all the 0’s with 1’s on both arrays, the answer will be -1 if there was no 0 in the array with the smaller sum of elements.
  • Otherwise, how can you update the value of exactly one of these 1’s to make the sum of the two arrays equal?

Solution 1.

// OJ: https://leetcode.com/problems/minimum-equal-sum-of-two-arrays-after-replacing-zeros
// Author: github.com/lzl124631x
// Time: O(A + B)
// Space: O(1)
class Solution {
public:
    long long minSum(vector<int>& A, vector<int>& B) {
        long long ca = 0, cb = 0, sa = 0, sb = 0, ka = 0, kb = 0;
        for (int n : A) {
            ca += n == 0;
            sa += n;
        }
        for (int n : B){
            cb += n == 0;
            sb += n;
        }
        ka = ca + sa;
        kb = cb + sb;
        if (ka < kb && ca == 0) return -1;
        if (kb < ka && cb == 0) return -1;
        return max(ka, kb);
    }
};