
面试+算法
PeakyBliner_W
这个作者很懒,什么都没留下…
展开
-
ACWING学习(三)——快速幂
快速幂前提:任何一个数k都可以由二进制表示,即k=alogk2logk+...+a121+a020 k = a_{logk}2^{logk} + ...+a_12^1 + a_02^0 k=alogk2logk+...+a121+a020其中alogkalog(k)−1....a1a0a_{logk}a_{log(k)-1}....a_1a_0alogkalog(k)−1....a1a0就对应了k的二进制!!一个数的幂可以由二分法拆成:xk=xa020+a121+...+alo原创 2020-10-10 15:03:55 · 199 阅读 · 0 评论 -
归并排序模版+例题
归并排序 归并排序是排序算法中最为经典的类型,采用了分治策略。时间复杂度为O(lnog(n))O(lnog(n))O(lnog(n)),若采用递归空间复杂度为O(log(n))O(log(n))O(log(n)),采用迭代则为O(1)O(1)O(1)。其主要步骤为:确定合并区间(相邻)有序数组合并 其中数组的合并较为简单:(采用清华大学邓公的方法,这儿写容器的版本)void merge(vector<int>& A,int lo ,int mid ,int hi){//原创 2020-10-09 15:53:31 · 476 阅读 · 0 评论 -
二分法模版+例题
二分法 二分法实际上非常灵活,虽然原理非常简单,但细节上十分要命,剑指offer上相关题就有两道。不如直接记下相关模版: 注意这儿的模版是左闭右闭的,即[lo,hi][lo,hi][lo,hi],朝向哪边收就保留当前的mid!找到最左侧的值:vector<int> nums{1,2,3,3,3,4,5,6,7};int k = 3;int lo = 0 , hi = nums.size()-1;while(lo < hi){ int mid = lo + hi >原创 2020-10-09 14:49:35 · 489 阅读 · 0 评论 -
ACWING算法基础课学习(一)
数组模仿单链表与邻接矩阵1.定义数组不仅仅具体存储的数据是有用的,有时候它的下标同样能够提供非常有用的信息,这一点常常被我们忽略。对于一个链表结构,最基本的元素有节点与next指针,对于每个节点可以用不同的idxiidx_iidxi唯一标识,它所拥有的数据可以使用e[idx]表示,而它的指针则可以用ne[idx]来表示,指向对应的idxjidx_jidxj:e[i]=dataine[i]=j e[i] = data_i\\ne[i] = je[i]=dataine[i]=j首先我们开辟能完原创 2020-09-23 01:32:17 · 2879 阅读 · 0 评论