网易首页 > 网易号 > 正文 申请入驻

2026-07-05:数对的最大公约数之和。用go语言,给定数组 nums(长度为 n)。先对每个位置 i 生成 prefixGcd[i]:令 mxi ...

0
分享至

2026-07-05:数对的最大公约数之和。用go语言,给定数组 nums(长度为 n)。先对每个位置 i 生成 prefixGcd[i]:令 mxi 为 nums[0..i] 中的最大值,然后 prefixGcd[i] 等于 nums[i] 与 mxi 的最大公约数。

随后把整个 prefixGcd 按非递减顺序排序。

接着从两端开始配对:每次取当前最小的未配对元素与当前最大的未配对元素组成一对,配对后把这两个元素移除并继续,直到无法再形成更多数对;

如果排序后的 prefixGcd 长度为奇数,正中间那个未能配对的元素保持不变并被忽略。对每个形成的数对,计算它们的最大公约数,并把所有这些最大公约数加总,最终返回该总和。

1 <= n == nums.length <= 100000。

1 <= nums[i] <= 1000000000。

输入: nums = [2,6,4]。

输出: 2。

解释:

构造 prefixGcd:

i

nums[i]

mxi(0..i 最大值)

prefixGcd[i] = gcd(nums[i], mxi)

0

2

2

2

1

6

6

6

2

4

6

2

prefixGcd = [2, 6, 2]。排序后形成 [2, 2, 6]。

将最小和最大的元素配对:gcd(2, 6) = 2。剩下的中间元素 2 被忽略。因此,总和为 2。

题目来自力扣3867。

一、完整分步详细执行流程 步骤1:遍历原数组,逐位计算前缀最大值 mxi、生成 prefixGcd 数组

遍历下标从0到数组末尾,全程维护一个全局变量mx,代表区间nums[0] ~ nums[i]的最大值,每轮操作逻辑:

  1. 1. 读取当前下标 i 的数组元素 nums[i];

  2. 2. 对比当前mx和 nums[i],更新mx为两者中更大的值,得到当前区间最大值 mxi;

  3. 3. 计算 nums[i] 与当前 mxi 的最大公约数 gcd,结果存入 prefixGcd 对应下标位置。

逐位演算示例
  • • i=0,nums[i]=2:
    初始 mx=0,更新 mx=2;计算 gcd(2,2)=2 → prefixGcd[0] = 2

  • • i=1,nums[i]=6:
    6>2,更新 mx=6;计算 gcd(6,6)=6 → prefixGcd[1] = 6

  • • i=2,nums[i]=4:
    4<6,mx保持6不变;计算 gcd(4,6)=2 → prefixGcd[2] = 2
    本轮结束得到原始 prefixGcd 数组:[2,6,2]

步骤2:对 prefixGcd 数组做升序排序

将数组按从小到大重新排列:
原数组 [2,6,2] → 排序后[2,2,6]

步骤3:双端配对、计算每对gcd并累加总和

配对规则:左指针取当前最小未配对元素,右指针取当前最大未配对元素,两两配对;数组长度为奇数时,中间单独元素直接舍弃,不参与计算。
操作方式:左指针从数组头部0开始,右指针从数组尾部n-1开始,循环配对,每轮完成一对后左指针右移、右指针左移,直到左指针 ≥ 右指针停止。

本例数组长度n=3:

  • • 左指针 l=0(值2),右指针 r=2(值6),组成一对;

  • • 计算该对gcd(2,6)=2,累加至总结果 ans;

  • • l自增到1,r自减到1,此时 l ≥ r,循环终止;

  • • 下标1的中间元素2无配对,直接忽略,不参与求和。

步骤4:返回累加总和

所有配对的gcd相加结果为2,即为最终输出。

二、全局完整逻辑概括

  1. 1. 一次线性扫描原数组,同步维护前缀最大值,同步生成等长 prefixGcd 数组;

  2. 2. 对 prefixGcd 执行标准升序排序;

  3. 3. 双指针首尾配对遍历排序后的数组,成对计算gcd并累加,中间落单元素丢弃;

  4. 4. 返回累加后的总和。

三、时间复杂度分析

设数组长度为 n(1 ≤ n ≤ 1e5)

  1. 1. 生成 prefixGcd:单次线性遍历 O(n);单次gcd欧几里得算法复杂度为对数级常数,可忽略,整体这一步 O(n)。

  2. 2. 排序 prefixGcd:Go标准库 slices.Sort 底层为快速排序,时间复杂度 O(n log n),是整个算法的瓶颈。

  3. 3. 首尾配对遍历:仅循环 n/2 次,线性 O(n),单次gcd为常数级。

总时间复杂度:O(n log n)

四、额外空间复杂度分析

  1. 1. 额外开辟长度为n的 prefixGcd 数组存储中间结果,占用 O(n) 空间;

  2. 2. 排序的栈/临时空间为排序算法内置开销,不计入额外业务空间;

  3. 3. 仅使用常数级临时变量 mx、ans、左右指针等。

总额外空间复杂度:O(n)

Go完整代码如下:

package main

import (
"fmt"
"slices"
)

func gcdSum(nums []int) (ans int64) {
n := len(nums)
pre := make([]int, n)
mx := 0
for i, x := range nums {
mx = max(mx, x)
pre[i] = gcd(x, mx)
}

slices.Sort(pre)
for i := range n / 2 {
ans += int64(gcd(pre[i], pre[n-1-i]))
}
return
}

func gcd(a, b int)int {
for a != 0 {
a, b = b%a, a
}
return b
}

func main() {
nums := []int{2, 6, 4}
result := gcdSum(nums)
fmt.Println(result)
}

Python完整代码如下:

# -*-coding:utf-8-*-

import math

def gcd_sum(nums):
n = len(nums)
pre = []
mx = 0
for x in nums:
mx = max(mx, x)
pre.append(math.gcd(x, mx))
pre.sort()
ans = 0
for i in range(n // 2):
ans += math.gcd(pre[i], pre[n - 1 - i])
return ans

if __name__ == "__main__":
nums = [2, 6, 4]
result = gcd_sum(nums)
print(result)

C++完整代码如下:

#include 

#include
#include

// 自定义 gcd 函数(欧几里得算法)
int gcd(int a, int b) {
while (a != 0) {
int tmp = a;
a = b % a;
b = tmp;
}
return b;
}

long long gcdSum(std::vector& nums) {
int n = nums.size();
std::vector pre(n);
int mx = 0;
for (int i = 0; i < n; ++i) {
mx = std::max(mx, nums[i]);
pre[i] = gcd(nums[i], mx);
}

std::sort(pre.begin(), pre.end());

long long ans = 0;
for (int i = 0; i < n / 2; ++i) {
ans += gcd(pre[i], pre[n - 1 - i]);
}
return ans;
}

int main() {
std::vector nums = {2, 6, 4};
long long result = gcdSum(nums);
std::cout << result << std::endl;
return0;
}


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

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
为何 KFC 要几乎强制手机点单?看网友的吐槽:引起万千共鸣

为何 KFC 要几乎强制手机点单?看网友的吐槽:引起万千共鸣

另子维爱读史
2026-09-17 20:41:04
曝哈里斯训练营遭遇左小腿拉伤 将在季前赛结束后进行复查

曝哈里斯训练营遭遇左小腿拉伤 将在季前赛结束后进行复查

北青网-北京青年报
2026-10-05 09:22:05
国庆假期第五天,闹心的事情一件接一件,高速堵车只是冰山一角

国庆假期第五天,闹心的事情一件接一件,高速堵车只是冰山一角

莹莹的历史说
2026-10-05 03:30:56
日本197人专案组连夜抓捕驻日美军20岁上等兵,涉嫌抢劫杀人后闲逛,在娱乐区被捕

日本197人专案组连夜抓捕驻日美军20岁上等兵,涉嫌抢劫杀人后闲逛,在娱乐区被捕

红星新闻
2026-10-04 13:14:09
利润暴涨910%!浙江隐形首富靠卖饮料瓶,半年狂入96亿

利润暴涨910%!浙江隐形首富靠卖饮料瓶,半年狂入96亿

莫地方
2026-10-04 17:58:46
世界排名更新!吴宜泽跃居第二直逼赵心童,袁思俊创新高丁俊晖保住前16

世界排名更新!吴宜泽跃居第二直逼赵心童,袁思俊创新高丁俊晖保住前16

世界体坛观察家
2026-10-05 00:05:23
马来西亚一名男子在尼泊尔洪灾中失踪37天后终被找到,已返回家中

马来西亚一名男子在尼泊尔洪灾中失踪37天后终被找到,已返回家中

阿尔卑斯瞭望
2026-10-04 19:55:46
随着丹麦1-0,德国0-0,荷兰2-1,葡萄牙2-1,欧国联最新积分榜出炉

随着丹麦1-0,德国0-0,荷兰2-1,葡萄牙2-1,欧国联最新积分榜出炉

侧身凌空斩
2026-10-05 04:49:33
出汗是血糖最好的反馈!医生:出现这4种出汗,多是血糖快失控了

出汗是血糖最好的反馈!医生:出现这4种出汗,多是血糖快失控了

千金芳儿
2026-10-05 09:05:14
已承认,知名演员夫妻确认离婚!

已承认,知名演员夫妻确认离婚!

财经要参
2026-09-29 16:00:05
奥迪“代步版”A6L上市,价格跌入谷底!

奥迪“代步版”A6L上市,价格跌入谷底!

米粒说车唯一呀
2026-10-04 14:01:54
尴尬了!某汽车厂商2000元邀头部车评人做视频,博主反问怎么养活300人,网友:嫌弃少可以婉拒,挂网上讽刺别人,寒碜的是自己

尴尬了!某汽车厂商2000元邀头部车评人做视频,博主反问怎么养活300人,网友:嫌弃少可以婉拒,挂网上讽刺别人,寒碜的是自己

火山詩话
2026-10-02 08:30:52
《新闻周刊》:俄罗斯喷气式无人机的生产速度令人恐惧

《新闻周刊》:俄罗斯喷气式无人机的生产速度令人恐惧

俄罗斯卫星通讯社
2026-10-03 16:06:26
好险!韩国U23队长只剩9天便要强制入伍,如今将免兵役去留洋

好险!韩国U23队长只剩9天便要强制入伍,如今将免兵役去留洋

懂球帝
2026-10-04 15:41:25
7-0,劳塔罗扛起锋线,梅西退出后,阿根廷2连胜轰11球0丢球

7-0,劳塔罗扛起锋线,梅西退出后,阿根廷2连胜轰11球0丢球

侧身凌空斩
2026-10-04 10:00:23
女单32强定16席:国乒占7席!石洵瑶完胜世界冠军,日本2人晋级

女单32强定16席:国乒占7席!石洵瑶完胜世界冠军,日本2人晋级

乒烧泳球
2026-10-04 21:43:34
蒙嘉慧罕谈原生家庭 父母姊妹全部离世 靠老公郑伊健一句话终结童年阴影 澄清没有移民日本

蒙嘉慧罕谈原生家庭 父母姊妹全部离世 靠老公郑伊健一句话终结童年阴影 澄清没有移民日本

TVB资讯台
2026-10-04 20:17:11
杜汶泽妻子病痛升级!曝肺腺癌转淋巴了,目前已停止接受靶向治疗

杜汶泽妻子病痛升级!曝肺腺癌转淋巴了,目前已停止接受靶向治疗

小徐讲八卦
2026-10-04 10:20:25
告诉你一个坏消息:2026上海深圳已出现4个“怪象”,深思一下

告诉你一个坏消息:2026上海深圳已出现4个“怪象”,深思一下

巢客HOME
2026-10-05 05:55:07
父亲县委书记下马后,老婆和我离婚了,半年后父亲调任市委副书记

父亲县委书记下马后,老婆和我离婚了,半年后父亲调任市委副书记

呆子的故事
2025-09-16 19:01:25
2026-10-05 09:40:49
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1496文章数 83关注度
往期回顾 全部

科技要闻

DeepSeek Harness国庆假期上新!

头条要闻

名校"7人轮奸案"震惊全美 女方曾称同意与2人发生关系

头条要闻

名校"7人轮奸案"震惊全美 女方曾称同意与2人发生关系

体育要闻

32胜0负!德约2-1逆转头号种子兹维列夫 第7次晋级中网四强

娱乐要闻

高晓松悄悄复出:官媒没给他留体面

财经要闻

零跑声明切割!蔡康永两面人身份被抵制

汽车要闻

方程豹9月热销破4万 首款皮卡鲨鱼将于四季度上市

态度原创

游戏
健康
家居
房产
公开课

《秋叶原迷踪》制作人专访:倾注全部心血的诚意之作

刷酸祛痘,为什么有人翻车?

家居要闻

2026建博会(广州) 公装联探展交流活动

房产要闻

保利大爆发,冲到榜一!海南楼市前三季度,热销榜出炉!

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版