Re: [闲聊] 每日leetcode

楼主: JIWP (JIWP)   2024-10-19 18:55:07
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)))
}
}

Links booklink

Contact Us: admin [ a t ] ucptt.com