精華區beta Marginalman 關於我們 聯絡資訊
※ 引述《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) } } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.249.242 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1746900214.A.015.html ※ 編輯: yam276 (123.193.249.242 臺灣), 05/11/2025 02:05:14