把三层循环修回两层
场景:实验机上 ~/work/cx/maxsum.cpp 求最大子段和:所有连续子段里,和最大的那个。结果是对的,可 n = 5000 时要跑很久——它对每一段 (i, j) 都从头再加一遍,是三层循环。 任务:改成两层循环(O(n²)),
修好前缀和的下标
场景:~/work/cx/query.cpp 先建前缀和,再回答若干个「第 l 到第 r 个数(从 1 数)的和」。每个答案都少了一个数。 任务:修好查询那一行的下标。make 编译后用 sample.txt 自测;check 会用随机数组
修好点积的溢出
场景:~/work/cx/dot.cpp 读两个长度为 n 的数组,输出对应位置相乘再相加的结果。数小的时候对,数一大就输出负数。 任务:修好溢出:每个数最大 10^5,n 最大 10^5。make 编译后用 sample.txt 自测;c
补写前缀和查询
场景:~/work/cx/range.cpp 读入一个数组和 q 个询问,每个询问问第 l 到第 r 个数(从 1 数)的和。build 和 ask 还没写。 任务:补全这两个函数(p[0] = 0,p[i] 是前 i 个数的和)。make
查找要回答的是什么
第 1 步:在这一排数里找 17 第 2 步:13 不是,往后看 第 3 步:15 不是,往后看 第 4 步:对上了:记下它的位置 13 15 17 23 24 i 查找这件事要回答的是【0】。
在不在和在哪差在哪
返回「在不在」和返回「在哪」的区别是【0】。
找不到时返回什么合适
要求返回位置的查找函数,找不到时最合适的返回值是【0】。
为什么不用 0 表示找不到
用 0 表示「找不到」是个坏主意,因为【0】。
查找和排序是什么关系
查找和排序的关系是【0】。
17 排在第几个
在 13、15、17、23、24 里从头找 17。运行下面这段程序: #include <iostream> #include <string> #include <vector> using names