跳到主要内容

1664.生成平衡数组的方案数

链接:1664.生成平衡数组的方案数
难度:Medium
标签:数组、前缀和
简介:如果一个数组满足奇数下标元素的和与偶数下标元素的和相等,该数组就是一个 平衡数组 。请你返回删除操作后,剩下的数组 nums 是 平衡数组 的 方案数 。

题解 1 - cpp

  • 编辑时间:2023-01-28
  • 执行用时:108ms
  • 内存消耗:92MB
  • 编程语言:cpp
  • 解法介绍:遍历。
class Solution {
public:
int waysToMakeFair(vector<int>& nums) {
int l[2] = {0}, r[2] = {0}, ans = 0;
for (int i = 0; i < nums.size(); i++) r[i % 2] += nums[i];
for (int i = 0; i < nums.size(); i++) {
r[i % 2] -= nums[i];
if (l[0] + r[1] == l[1] + r[0]) ans++;
l[i % 2] += nums[i];
}
return ans;
}
};

题解 2 - python

  • 编辑时间:2023-01-28
  • 执行用时:328ms
  • 内存消耗:19.7MB
  • 编程语言:python
  • 解法介绍:同上。
class Solution:
def waysToMakeFair(self, nums: List[int]) -> int:
l = [0] * 2
r = [0] * 2
ans = 0
for i, num in enumerate(nums):
r[i % 2] += num
for i, num in enumerate(nums):
r[i % 2] -= num
if l[0] + r[1] == l[1] + r[0]:
ans += 1
l[i % 2] += num
return ans

题解 3 - rust

  • 编辑时间:2023-01-28
  • 执行用时:8ms
  • 内存消耗:2.5MB
  • 编程语言:rust
  • 解法介绍:同上。
impl Solution {
pub fn ways_to_make_fair(nums: Vec<i32>) -> i32 {
let mut l = [0; 2];
let mut r = [0; 2];
let mut ans = 0;
for i in 0..nums.len() {
r[i % 2] += nums[i];
}
for i in 0..nums.len() {
r[i % 2] -= nums[i];
if l[0] + r[1] == l[1] + r[0] {
ans += 1;
}
l[i % 2] += nums[i];
}
ans
}
}