Cover image for leetcode每日一题 P3354 使数组元素等于零

leetcode每日一题 P3354 使数组元素等于零

字数 265
阅读
访客

时间轴

时间轴

2025-10-28

init

前缀和

题目:

依照题意,如果选择的 index 左边的所有和与右边的所有数和相同,那么往左走往右走都可以。如果左边比右边大 1 或者右边比左边大 1,那么只能选择大的那一边。利用前缀和快速求解数组元素的和。

123456789101112131415161718192021222324252627282930313233343536
struct Solution;impl Solution {    pub fn count_valid_selections(nums: Vec<i32>) -> i32 {        let mut scheme = 0;        let mut vec: Vec<i32> = Vec::with_capacity(nums.len()); // 计算前缀和        let mut last = 0;        for &val in nums.iter() {            last = last + val;            vec.push(last);        }        let total = if let Some(&sum) = vec.last() { sum } else { 0 };        for (index, &val) in nums.iter().enumerate() {            if val == 0 {                let left_sum = if let Some(&sum) = vec.get(index - 1) {                    sum                } else {                    0                };                let right_sum = if let Some(&sum) = vec.get(index) {                    total - sum                } else {                    0                };                if left_sum == right_sum {                    scheme += 2;                } else if left_sum == right_sum + 1 || right_sum == left_sum + 1 {                    scheme += 1;                }            }        }        scheme    }}
评论加载中…