问题背景
给你两个由正整数和
0
0
0 组成的数组
n
u
m
s
1
nums_1
nums1 和
n
u
m
s
2
nums_2
nums2。
你必须将两个数组中的 所有
0
0
0 替换为 严格 正整数,并且满足两个数组中所有元素的和 相等 。
返回 最小 相等和 ,如果无法使两数组相等,则返回
−
1
-1
−1。
数据约束
- 1 ≤ n u m s 1 . l e n g t h , n u m s 2 . l e n g t h ≤ 1 0 5 1 \le nums_1.length, nums_2.length \le 10 ^ 5 1≤nums1.length,nums2.length≤105
- 0 ≤ n u m s 1 [ i ] , n u m s 2 [ i ] ≤ 1 0 6 0 \le nums_1[i], nums_2[i] \le 10 ^ 6 0≤nums1[i],nums2[i]≤106
解题过程
本题中替换的元素只有下限没有上限,意味着如果不要求最小只要求相等,最终在数学上两个数组的和可以无限大。
因此,能否实现相等取决于两个数组中有没有不包含
0
0
0 且和很小的。能实现的情况下,最小和则是原本数组中元素之和与
0
0
0 的数量的和。
具体实现
class Solution {
public long minSum(int[] nums1, int[] nums2) {
long sum1 = 0, sum2 = 0;
int count1 = 0, count2 = 0;
for (int num : nums1) {
sum1 += num;
count1 += num == 0 ? 1 : 0;
}
for (int num : nums2) {
sum2 += num;
count2 += num == 0 ? 1 : 0;
}
if ((sum1 + count1 > sum2 && count2 == 0) || (sum2 + count2 > sum1 && count1 == 0)) {
return -1;
}
return Math.max(sum1 + count1, sum2 + count2);
}
}