2918. Minimum Equal Sum of Two Arrays After Replacing Zeros
給兩個整數矩陣nums1、nums由0以上的數字組成
請把nums1、nums2中的0更換成大於0的數字
使nums1的元素總和 = nums2的元素總和
並且回傳經過上述操作後最小的總和
如果無法透過上述操作使nums1、nums2的總和相等
就回傳-1
思路:
先分別計算nums1、num2的總和(sum1、sum2)以及0出現的次數(zero1、zero2)
只要nums1、nums2都有0那一定可以使兩個的總和相等
所以需要回傳-1的情況需要滿足下列2個條件的任一個:
(1)zero1等於0 且 sum1-sum2 < zero2
(2)zero2等於0 且 sum2-sum1 < zero1
不是上述情況的話
就要去比較sum1、sum2誰比較大
(1)sum1比較大
回傳sum2 + max(zero2 , sum1-sum2 + zero1 )
(2)sum2比較大
回傳sum1 + max(zero1 , sum2-sum1 + zero2)
(3)sum1 == sum2
回傳 sum1 + max(zero1、zero2)
golang code :
func minSum(nums1 []int, nums2 []int) int64 {
zero_num1, zero_num2 := 0, 0
sum1, sum2 := 0, 0
for _, val := range nums1 {
sum1 += val
if val == 0 {
zero_num1++
}
}
for _, val := range nums2 {
sum2 += val
if val == 0 {
zero_num2++
}
}
if (zero_num1 == 0 && sum1-sum2 < zero_num2) || (zero_num2 == 0 && sum2-sum1
< zero_num1) {
return -1
}
if sum1 > sum2 {
return int64(sum2 + (max(zero_num2, sum1-sum2+zero_num1)))
} else {
return int64(sum1 + (max(zero_num1, sum2-sum1+zero_num2)))
}
}