计划
预计两个月。(±一个月)
实际情况
-
快速排序。
算法思想:分治; 时间复杂度:O(nlogn)
——2020/5/13 -
归并排序。
算法思想:分治; 时间复杂度:O(nlogn)
——2020/5/14 -
整数二分。
难点,划重点。注1:捋一下搞不懂的地方,对于求上下界问题中的check()函数很乱。
注2:算法思想:折半查找,根据某一性质来判断每次是进入左区间 or 右区间。
时间复杂度:O( logn )注3:对于两种模板,画一个图一下子边界就能出来了,要注意的地方是当L = mid时,mid = (L + R ) / 2 需变成 mid =( L + R + 1) / 2,这是为了避免 L = R -1 时,可能出现死循环的情况。
——2020/5/15/10:20 -
浮点数二分。
算法思想:折半查找
注1:因为是浮点数,故不存在整数二分中的边界问题,mid = (L + R) / 2.0 即可。 -
高精度加法(大整数 + 大整数)。
算法思想:数组存储,模拟手算加法的过程
——2020年5月16日11:16:10 -
高精度减法(大整数 - 大整数)
——2020年5月24日22:17:10 -
高精度乘法(大整数 * 小整数)
——2020年5月24日22:18:11 -
高精度除法(大整数 整除 小整数)
注:4种高精度算法中,数组低位存放个位数字,;例如:a = “123456”,A = {6,5,4,3,2,1}.
——2020年5月29日16:07:32 -
前缀和(s[ l, r ] = s[ r ] - s[l - 1)
步骤:1、递推求前缀和; 2、 求区间和
——2020年5月29日16:48:53 -
二维前缀和
步骤:1、递推求前缀和;2、求区间和
ps:画个图,一目了然
——2020年5月29日22:32:10 -
一维差分
效果:类似前缀和的逆运算,使得区间加:[L, R] 上的数都各加上一个常数,时间复杂度从O(n)降为 O(1);
实现:差分数组 B[L] += C, B[R + 1] -= C
——2020年6月16日15:32:40 -
二维差分
差分的思路都是一样的,跟一维的差别就是计算方式、求前缀和不同。
——2020年6月16日16:54:59 -
双指针算法。
难点,划重点。
模板看起来虽简单,但是用起来,一脸懵逼~ -
位运算
主要介绍两种位运算:
(1)求n的二进制表示的第k位数字;
(2)lowbit(n)操作:求得n二进制表示的最后一位1的大小;
具体实现:lowbit(n)= n & -n,因 C++中 -n = n取反+ 1
——2020年6月29日15:27:04 -
离散化。
难点,划重点。
主要思想是:数据范围大,但数据个数小,将其映射到一个小的空间,大大降低复杂度,提高效率。例题挺难的呀,理解了一丢丢,说不定以后能更理解一些,哈
——2020年7月7日18:54:51 -
区间合并。
相对来说,比较简单一些,将区间存储于 pair类型 的数组中,合并操作:排序、三种情况进行合并、放进临时数组中。 -
静态链表。
采用数组模拟,即静态的链表,为什么不用动态的呢?原因是C++里的new操作非常慢,算法题若使用,80%会超时。
END
————————————
该往哪里走
————————————