所谓计数排序,就是建立在计数上的排序。 计数排序不以比较为基础,所以可以打破比较排序$O(nlogn)$的复杂度下界。 我们只要计算出比$i$小的数字有多少个,就可以知道$i$在数据里的排名。然后根据排名,我们就可以反造一波排好序的数据了。 我们用$rk[i]$记录第$i$个数据的排名,$sum[i ...
分类:
编程语言 时间:
2018-09-14 23:05:44
阅读次数:
171
后序遍历,把每个节点的后序遍历用字符串保存下来。 时间复杂度,T(n)=2T(n/2)+n (字符串处理) = O(nlogn),最坏 O(n^2)。 空间复杂度,每个节点都要字符串来存,O(n^2)。 ...
分类:
其他好文 时间:
2018-09-14 10:54:31
阅读次数:
121
堆优化prim 复杂度大概O(nlogn) ...
分类:
其他好文 时间:
2018-09-12 18:01:04
阅读次数:
404
ST表类似树状数组,线段树这两种算法,是一种用于解决RMQ(Range Minimum/Maximum Query,即区间最值查询)问题的离线算法 与线段树相比,预处理复杂度同为O(nlogn),查询时间上,ST表为O(1),线段树为O(nlogn) st表的主体是一个二维数组st[i][j],表示 ...
分类:
其他好文 时间:
2018-09-08 15:17:48
阅读次数:
218
#第一次,找到最大值 n=[3,5,1,6,2] for i in range(len(n)-1): if n[i]>n[i+1]: n[i],n[i+1]=n[i+1],n[i] print (n[-1]) #第二次,找到次大值,放在倒数第二的位置 n=[3,1,5,2,6] for i in r ...
分类:
编程语言 时间:
2018-09-08 11:50:32
阅读次数:
333
2018 CCPC网络赛 Buy and Resell 题目描述 :有一种物品,在$n$个地点的价格为$a_i$,现在一次经过这$n$个地点,在每个地点可以买一个这样的物品,也可以卖出一个物品,问最终赚的钱的最大值。 solution 用两个堆来维护,一个堆维护已经找到卖家的,一个堆维护还没找到卖家 ...
分类:
其他好文 时间:
2018-09-07 22:49:22
阅读次数:
349
一、前言 归并排序由冯?诺依曼于1945年在EDVAC上首次编程实现,归并排序(mergesort)的构思朴实却亦深刻,作为一个算法既古老又仍不失生命力。在排序算法发展的历史上,归并排序具有特殊的地位,它是第一个可以在最坏情况下依然保持O(nlogn)运行时间的确定性排序算法。 时至今日,在计算机早 ...
分类:
编程语言 时间:
2018-09-07 20:10:10
阅读次数:
213
预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于 ...
分类:
编程语言 时间:
2018-09-07 14:19:09
阅读次数:
167
方法一: 滑动窗口问题,维护一个sum<s的窗口。时间复杂度O(n)。 方法二:二分 时间复杂度O(nlogn),详见 https://leetcode.com/problems/minimum-size-subarray-sum/solution/ ...
分类:
其他好文 时间:
2018-09-07 10:57:32
阅读次数:
137
1、快速排序快速排序是,设定一个基准,从两头出发把小于基准的序列统一在左边,大于基准的序列在右边。时间复杂度:平均O(nlogn)2、冒泡排序冒泡排序是,通过和相邻的元素比较,重复遍历。时间复杂度:O(n^2)3、直接选择排序直接选择排序是一种,把前面无序区最小的元素放到有序区的最后。时间复杂度:O(n^2)4、堆排序堆排序,是一种类似二叉树进行排序的方法,通过升序或者降序,保证父节点比子节点都大
分类:
编程语言 时间:
2018-09-06 20:06:26
阅读次数:
165