
2026-02-27:计算交替和。用go语言,给定一个整数数组 nums,定义其交替和为:把所有下标为偶数的元素相加,再减去所有下标为奇数的元素。等价于计算 Σ_{i=0}^{n-1} (-1)^i * nums[i]。返回这个交替和的值。
1 <= nums.length <= 100。
1 <= nums[i] <= 100。
输入: nums = [1,3,5,7]。
输出: -4。
解释:
偶数下标位置的元素是 nums[0] = 1 和 nums[2] = 5,因为 0 和 2 是偶数。
奇数下标位置的元素是 nums[1] = 3 和 nums[3] = 7,因为 1 和 3 是奇数。
交替和为 nums[0] - nums[1] + nums[2] - nums[3] = 1 - 3 + 5 - 7 = -4。
题目来自力扣3701。
首先明确题目中“交替和”的定义:
nums[0] - nums[1] + nums[2] - nums[3] + ... + (-1)^i * nums[i](i为元素下标);x * (1 - i%2*2) 是对 (-1)^i * x 的等价变形,我们可以验证:1 - 0*2 = 1 → 等价于乘以+1;1 - 1*2 = -1 → 等价于乘以-1。
这一变形避免了使用幂运算,更高效且易计算。以输入 nums = [1,3,5,7] 为例,交替和计算为 1 - 3 + 5 - 7 = -4,与题目输出一致。
函数 alternatingSum 首先初始化返回值 ans 为0,用于累加最终的交替和。此时 ans = 0。
代码通过 for i, x := range nums 遍历数组的每个元素,其中:
i 是元素的下标(从0开始);x 是下标i对应的数组元素值;x * (1 - i%2*2) 累加到 ans 中。我们逐次拆解循环过程:
循环次数 | 下标i | 元素x | i%2 | 计算因子(1 - i%2*2) | 本次累加值(x×因子) | ans更新后的值 |
|---|---|---|---|---|---|---|
第1次 | 0 | 1 | 0 | 1 - 0×2 = 1 | 1×1 = 1 | 0 + 1 = 1 |
第2次 | 1 | 3 | 1 | 1 - 1×2 = -1 | 3×(-1) = -3 | 1 - 3 = -2 |
第3次 | 2 | 5 | 0 | 1 - 0×2 = 1 | 5×1 = 5 | -2 + 5 = 3 |
第4次 | 3 | 7 | 1 | 1 - 1×2 = -1 | 7×(-1) = -7 | 3 - 7 = -4 |
遍历结束后,ans 的值为-4,函数将其返回。main函数接收结果并打印,输出为-4,符合题目要求。
ans、i、x 三个整型变量,没有创建额外的数组、切片或其他数据结构;nums 切片,没有复制或新建,不属于“额外空间”;.
package main
import (
"fmt"
)
func alternatingSum(nums []int) (ans int) {
for i, x := range nums {
ans += x * (1 - i%2*2)
}
return
}
func main() {
nums := []int{1, 3, 5, 7}
result := alternatingSum(nums)
fmt.Println(result)
}

.
# -*-coding:utf-8-*-
def alternatingSum(nums):
ans = 0
for i, x in enumerate(nums):
# i%2*2 计算:当i为偶数时结果为0,当i为奇数时结果为2
# 1 - i%2*2 计算:当i为偶数时结果为1,当i为奇数时结果为-1
ans += x * (1 - (i % 2) * 2)
return ans
def main():
nums = [1, 3, 5, 7]
result = alternatingSum(nums)
print(result)
if __name__ == "__main__":
main()
.
#include <iostream>
#include <vector>
using namespace std;
int alternatingSum(vector<int>& nums) {
int ans = 0;
for (int i = 0; i < nums.size(); i++) {
int x = nums[i];
// i%2*2 计算:当i为偶数时结果为0,当i为奇数时结果为2
// 1 - i%2*2 计算:当i为偶数时结果为1,当i为奇数时结果为-1
ans += x * (1 - (i % 2) * 2);
}
return ans;
}
int main() {
vector<int> nums = {1, 3, 5, 7};
int result = alternatingSum(nums);
cout << result << endl;
return0;
}

·
我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。
·