题目链接:https://ac.nowcoder.com/acm/problem/14247 思想:暴力枚举两个区间的左右端点时间复杂度很高,可如果枚举一个区间,问题会简化。 维护到 i 处的异或和(pre[i],类似于桶排序中的桶,所以num数组开大点),枚举右区间加上左区间与当前区间异或值相等的 ...
分类:
其他好文 时间:
2020-04-23 01:01:16
阅读次数:
55
插入排序 直接插入排序,折半插入排序,2-路插入排序,希尔排序 快速排序 冒泡排序,快速排序(冒泡排序改进), 选择排序 简单选择排序,树形选择排序,堆排序 归并排序 基数排序 ...
分类:
编程语言 时间:
2020-04-20 13:41:41
阅读次数:
63
基数排序(桶排序): 设置若干个箱子,将关键字为k的记录放入第k个箱子中,然后按序号将非空的连接。而数字是有范围的,若待排元素均由0-9这十个数字组成,则只需设置十个箱子,相继按个、十、百...进行排序 平均,最坏时间复杂度 O(k*(n+m)) k是关键字的个数,如个位、十位分别就是关键字;n是元 ...
分类:
编程语言 时间:
2020-04-19 14:52:31
阅读次数:
55
public void countingsort(int[] array, int[] b, int k) { //创建数组c int[] c = new int[k+1]; for(int i=0;i<c.length;i++) { c[i] = 0; } //统计数组array中每个元素出现的次 ...
分类:
编程语言 时间:
2020-04-18 13:38:32
阅读次数:
56
堆排序,快速排序的时间复杂度为nlog(n)。他们都是运用比较排序的结果。好比决策树模型。 属于线性时间排序的算法有:计数排序,基数排序和桶排序。 计数排序: 先分别求出每个元素的频数,不过如果元素值较大时,比较浪费内存空间。 def Counting_Sort(A,B,k): for i in r ...
分类:
编程语言 时间:
2020-04-17 21:52:51
阅读次数:
68
桶排序 桶排序的特点是时间复杂度比较低,运算起来非常快,逻辑也很简便,写起来很容易。但是空间复杂度非常大,不适合大型数据,因为大型数据浪费的内存空间特别多。而且使用桶排序时数据类型比较单一,不适合复杂情况 通过下面一个例题理解 桶排序 解析: 创建一个长度为11的数组,下标分别是0~10,根据满分是 ...
分类:
编程语言 时间:
2020-04-15 13:54:08
阅读次数:
76
/* * 基数序 解决不能负数的问题 */ public static void negative_radix_sortin(int[] str) { // 桶 10个桶 每个桶的最大容量默认为数组长度 int[][] bucket = new int[10][str.length]; // 每个桶 ...
分类:
编程语言 时间:
2020-04-11 23:47:10
阅读次数:
206
稳定性的定义与意义: 通俗地讲就是能保证排序前两个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。 如果是不稳定排序,则需要第二次排序,会增加系统开销。 选择排序: 举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏 ...
分类:
编程语言 时间:
2020-04-09 12:59:31
阅读次数:
136
算法 1、排序算法 冒泡排序 选择排序 插入排序 快速排序 希尔排序 计数排序 2、列表查找 从列表中查找指定的元素 顺序查找 从列表第一个元素开始,顺序进行搜索,直到找到为止 二分查找 从有序列表的候选区data[0: n]开始,通过对待查找的值与候选区中的值比较使候选区的值减半 数据结构与算法动 ...
分类:
编程语言 时间:
2020-04-07 09:58:34
阅读次数:
98
计数排序 基本思想 ? 计数排序对一定量的整数排序的速度非常快,一般快于其他排序算法。但计数排序局限性比较大,只限于对整数进行排序。 对于一个输入数组中的一个元素i,只要我们知道了这个数组中比i小的元素的个数x,那么我们就可以直接把i放到第(x+1)个位置,即i的索引为x(索引从0开始)。 算法步骤 ...
分类:
编程语言 时间:
2020-04-05 00:23:43
阅读次数:
85