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