Re: [闲聊] 每日leetcode

楼主: yam276 ('_')   2025-05-11 02:03:32
※ 引述《Rushia (早瀬ユウカの体操服 )》之铭言:
: https://leetcode.com/problems/minimum-equal-sum-of-two-arrays-after-replacing-zeros
: 2918. Minimum Equal Sum of Two Arrays After Replacing Zeros
: 给你两个阵列,你要把阵列的所有0替换成一个大于0的正整数,并且使两个阵列的和相等
: ,求出这个和最小多少。
: 思路:
: 1.用贪婪做,0表示可以替换的格子,最小为1,可以分别得到nums1和nums2的最小和
: ,取这两个最小和里面最大的就好(小的可以增加格子的数字变成大的)。
: 2.如果某个阵列没0又比另一个阵列的最小和小返回-1。
有三个情况:
case1: 都没有0
case2: 一边没有0
case3: 都有0
处理:
case1: 判断是否相等就好
case2: 没0的要比较大
case3: nums1 跟 nums2 的 (总和+零的数量) 取较大者
Code:
impl Solution {
pub fn min_sum(nums1: Vec<i32>, nums2: Vec<i32>) -> i64 {
let zero_in_nums1 = nums1.iter().filter(|&&x| x == 0).count() as i64;
let zero_in_nums2 = nums2.iter().filter(|&&x| x == 0).count() as i64;
let sum1: i64 = nums1.iter().map(|&x| x as i64).sum();
let sum2: i64 = nums2.iter().map(|&x| x as i64).sum();
// case 1
if zero_in_nums1 == 0 && zero_in_nums2 == 0 {
return if sum1 == sum2 { sum1 } else { -1 };
}
// case 2
if zero_in_nums1 == 0 {
let diff = sum1 - sum2;
return if diff >= zero_in_nums2 { sum1 } else { -1 };
}
if zero_in_nums2 == 0 {
let diff = sum2 - sum1;
return if diff >= zero_in_nums1 { sum2 } else { -1 };
}
// case 3
std::cmp::max(sum1 + zero_in_nums1, sum2 + zero_in_nums2)
}
}

Links booklink

Contact Us: admin [ a t ] ucptt.com