首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >2026-02-27:计算交替和。用go语言,给定一个整数数组 nums,定义其交替和为:把所有下标为偶数的元素相加,再减去所有下标为奇数的元素

2026-02-27:计算交替和。用go语言,给定一个整数数组 nums,定义其交替和为:把所有下标为偶数的元素相加,再减去所有下标为奇数的元素

作者头像
福大大架构师每日一题
发布2026-03-04 19:49:58
发布2026-03-04 19:49:58
810
举报

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 的等价变形,我们可以验证:
    • • 当i为偶数(i%2=0):1 - 0*2 = 1 → 等价于乘以+1;
    • • 当i为奇数(i%2=1):1 - 1*2 = -1 → 等价于乘以-1。 这一变形避免了使用幂运算,更高效且易计算。

以输入 nums = [1,3,5,7] 为例,交替和计算为 1 - 3 + 5 - 7 = -4,与题目输出一致。

二、代码执行过程分步解析(以nums = [1,3,5,7]为例)

步骤1:初始化结果变量

函数 alternatingSum 首先初始化返回值 ans 为0,用于累加最终的交替和。此时 ans = 0

步骤2:遍历数组并计算交替和(核心逻辑)

代码通过 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

步骤3:返回最终结果

遍历结束后,ans 的值为-4,函数将其返回。main函数接收结果并打印,输出为-4,符合题目要求。

三、时间复杂度与空间复杂度分析

1. 时间复杂度

  • • 遍历数组:代码仅需一次遍历数组的所有元素,数组长度为n(本例中n=4),遍历次数为n次;
  • • 单次循环操作:每次循环仅涉及“取模、乘法、加法”等常数级操作(O(1));
  • • 总时间复杂度:O(n) × O(1) = O(n)(线性时间); 结合题目约束(n≤100),计算量极小,性能无任何问题。

2. 额外空间复杂度

  • • 变量开销:仅使用了 ansix 三个整型变量,没有创建额外的数组、切片或其他数据结构;
  • • 数组本身:代码直接使用输入的 nums 切片,没有复制或新建,不属于“额外空间”;
  • • 总额外空间复杂度:O(1)(常数空间),不随数组长度变化。

总结

  1. 1. 核心过程:先初始化结果为0,再遍历数组的每个元素,根据下标奇偶性给元素乘以+1或-1,累加所有结果得到交替和;
  2. 2. 时间复杂度:O(n)(仅需一次线性遍历数组,单次循环为常数操作);
  3. 3. 额外空间复杂度:O(1)(仅使用固定数量的临时变量,无额外数据结构开销)。

Go完整代码如下:

.

代码语言:javascript
复制
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)
}
在这里插入图片描述
在这里插入图片描述

Python完整代码如下:

.

代码语言:javascript
复制
# -*-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()
在这里插入图片描述
在这里插入图片描述

C++完整代码如下:

.

代码语言:javascript
复制
#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助力您的未来发展。

·

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-02-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、核心规则与公式转化
  • 二、代码执行过程分步解析(以nums = [1,3,5,7]为例)
    • 步骤1:初始化结果变量
    • 步骤2:遍历数组并计算交替和(核心逻辑)
    • 步骤3:返回最终结果
  • 三、时间复杂度与空间复杂度分析
    • 1. 时间复杂度
    • 2. 额外空间复杂度
  • 总结
  • Go完整代码如下:
  • Python完整代码如下:
  • C++完整代码如下:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档