二分的意义
优化。顾名思义,将一整个有序的数列分成两个部分,不断缩小边界,查找某个数字。
二分的时间复杂度为 O(log 2 n) 。
此时,我们学的还是整数二分以及浮点二分。
整数二分的两个模板
二分的前提是这个序列是有序的,也就是单调递增的。
一般来说,二分会取中间值进行初始化,再判断这个中间值是否大于目标值。若是,则缩减左边界,否则缩减右边界。直至逼近答案。
说“逼近”,是因为有时查找的元素不存在于序列中,那所二分出的答案是接近于的,但又是不正确的。所以要加上一个特判。除非说明给出的想查询的元素所有都是存在于序列中的。
时间复杂度
时间复杂度,就是电脑运行一段程序所需要的时间。
另外,电脑每秒可以运行 1e8 次。(x e y 代表 x×10y,即 1e8=100000000)
时间复杂度记作 O(n)。
开始
前缀和是一种优化算法,用于求区间和。若数据范围特别大,写 for 循环很可能会爆时间复杂度,就可以用上前缀和了。前缀和有一维前缀和和二维前缀和,我暂时还没有学二位前缀和,故在此不多赘述。
使用
一维前缀和需要把一个数组比如数组 a[1] 到 a[n] (n 为 a 数组长度)储存到另一个数组中比如 数组 b。那么:
b[i] (i≤n)=j=1∑ia[j]