zhangjinxuan 发表于 2023-6-6 11:30:36

zhenjen 发表于 2023-6-6 11:27
个人思路:1.找包含公因数的区间。h=gcd()+包含公因数区间k,记录左右端点。n=h。2.加if(h>n)更新记录 ...

给定一个正整数序列 a,请找到两个数 l, r,使 gcd(al, al+1, ..., ar) + al, al+1, ..., ar 最大,输出 l, r,并且输出这个最大值。

gcd 表示最大公因数。

zhenjen 发表于 2023-6-6 11:31:20

找最大子区间的算法,改改应该用

zhangjinxuan 发表于 2023-6-6 11:32:25

zhenjen 发表于 2023-6-6 11:31
找最大子区间的算法,改改应该用

{:10_277:}

那么我们怎么求出每个子区间的最大公因数呢

zhenjen 发表于 2023-6-6 11:36:44

不知道,但可以上网查找

zhangjinxuan 发表于 2023-6-6 11:37:26

zhenjen 发表于 2023-6-6 11:36
不知道,但可以上网查找

网上找不到我才问的,chatgpt 回答的也是 O(N^2) 算法。

zhenjen 发表于 2023-6-6 11:40:40

时间复杂度要求是o(n)?

zhangjinxuan 发表于 2023-6-6 11:41:09

zhenjen 发表于 2023-6-6 11:40
时间复杂度要求是o(n)?

是的,因为你看,1 <= n <= 1000000,但是 1 <= a_i <= 1000000,可以根据这一条下手

zhenjen 发表于 2023-6-6 11:42:53

n是数据范围,那a_i是什么?

zhangjinxuan 发表于 2023-6-6 11:43:18

zhenjen 发表于 2023-6-6 11:42
n是数据范围,那a_i是什么?

n 是数组长度,a_i 表示 a 的任一元素

zhenjen 发表于 2023-6-6 11:44:18

n是长度,a是数字?

zhangjinxuan 发表于 2023-6-6 11:45:19

zhenjen 发表于 2023-6-6 11:44
n是长度,a是数字?

n 是长度,a 是一个数组,a_i 表示 a 的第 i 个元素,在这里可能不太清晰,这个意思就是,a 的所有元素都大于等于 1,小于等于 1000000

zhenjen 发表于 2023-6-6 11:46:20

时间复杂度没有要求。

zhangjinxuan 发表于 2023-6-6 11:47:52

zhenjen 发表于 2023-6-6 11:46
时间复杂度没有要求。

时间复杂度自己想,想一想怎样的时间复杂度才能在 1s 以内通过此题。

zhenjen 发表于 2023-6-6 11:56:13

zhangjinxuan 发表于 2023-6-6 11:47
时间复杂度自己想,想一想怎样的时间复杂度才能在 1s 以内通过此题。

我推荐看下找最大子区间的算法.算法时间复杂有on

zhangjinxuan 发表于 2023-6-6 12:07:44

zhenjen 发表于 2023-6-6 11:56
我推荐看下找最大子区间的算法.算法时间复杂有on

但是这里还有最大公因数,只有求和都会做嗷。

zhangjinxuan 发表于 2023-6-6 20:28:00

zhangjinxuan 发表于 2023-6-7 10:07:19

zhangjinxuan 发表于 2023-6-8 14:14:06

yinda_peng 发表于 2023-6-8 20:53:38

maybe,可以分治?我不会,你可以试试要求GPT写出O(n)复杂度的代码

zhangjinxuan 发表于 2023-6-8 21:07:05

yinda_peng 发表于 2023-6-8 20:53
maybe,可以分治?我不会,你可以试试要求GPT写出O(n)复杂度的代码

分治{:10_257:}

说详细点呢?说个“也许”有点半对不对的感觉。

我问了 GPT 的,大多都是 O(n^2)
页: 1 [2] 3
查看完整版本: 区间 gcd 与总和的和最大值问题,这个问题有点不会,望高人赐教,谢谢【重金悬赏】