前缀和表长什么样

运行下面这段程序: def build_prefix(a): p = [] s = 0 for x in a: s += x p.append(s) return p pri

开始练习 →

用它求中间三个数的和

同一张表,求下标 1 到 3 的和。运行下面这段程序: def build_prefix(a): p = [] s = 0 for x in a: s += x p.append(s)

开始练习 →

把前缀和表建出来

补全 build_prefix:返回一个列表,第 i 项是前 i+1 个数的总和。 建好之后把整张表拼起来输出(用 / 隔开)。

开始练习 →

用前缀和查区间和

补全 range_sum:用前缀和求下标 l 到 r 的和。 ⚠️ l 是 0 的时候不能去取 p[-1]。 求下标 1 到 3 的和。

开始练习 →

换来的到底是多少

补全两个函数:brute_ops(n, m) 返回"每次都从头加一遍"做 m 次查询的操作数;prefix_ops(n, m) 返回"先建表再查"的操作数。 算 n=1000、m=1000 的情况,把

开始练习 →

为什么小数据上 O(n²) 有时更快

数据量很小时,O(n²) 的做法有时反而比 O(n log n) 快,因为【0】。

开始练习 →

判断"能撑多大数据"要看什么

判断一个算法能不能撑住更大的数据,看的是【0】。

开始练习 →

数据量翻倍,O(n²) 会怎样

数据量翻一倍,一个 O(n²) 的算法耗时大约变成原来的【0】。

开始练习 →

翻倍之后差了几倍

运行下面这段程序: def sq(n): return n * n print(sq(200) // sq(100))

开始练习 →

大数据下两种做法差多少

一千个元素、一千次查询。运行下面这段程序: def brute_ops(n, m): return n * m def prefix_ops(n, m): return n + m print(brute_ops(100

开始练习 →