快排确实厉害!!! 总的思想是分治递归,取定一个值作为标签,比该值小的去左边,比该值大的去右边。 单向扫描分区法: 去左边的操作:只将sp++即可。 去右边的操作:具体是将sp指向的值与bigger指向的值交换。 考虑边界:当扫描指针sp与bigger相等时,再执行一次循环后,sp刚好在bigger ...
分类:
编程语言 时间:
2020-04-17 21:55:43
阅读次数:
88
题目链接:Garden of Eden 题意:给定一颗n个节点的树,每个节点有一种颜色,颜色有k种,求树上有多少条路径包含这k种颜色,n<=50000,k<=10 思路:树上路径问题,用点分治求解,又由于k<=10,所以可以用二进制状态表示一条路径上包含的颜色集合,比如状态8转换成二进制为1000, ...
分类:
其他好文 时间:
2020-04-17 00:30:13
阅读次数:
53
分治策略 分治策略是一种解决问题的思路: 将问题分为若干更小规模的部分 通过解决每一个小规模问题,并将结果汇总得到原问题的解。 PS:递归问题则体现了分治策略。 优化问题和贪心策略 1.优化问题例子:找零兑换问题 让自动售货机每次找零给顾客最少数量硬币。 贪心策略解决:我们每次都试图解决问题尽量大的 ...
分类:
编程语言 时间:
2020-04-16 19:35:55
阅读次数:
70
归并排序(MERGE SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide and conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解, 而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 简而言之、就是将一个整体得 ...
分类:
编程语言 时间:
2020-04-16 19:29:42
阅读次数:
66
归并排序 实现原理 所谓归并排序,指的是如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。 归并排序使用了分治思想,分治,顾名思义,就是分而治之,将一个大问题分解成小的子问题来解决。说到这里,可能你就能联想起我们之前 ...
分类:
编程语言 时间:
2020-04-15 21:38:58
阅读次数:
78
题目链接:https://nanti.jisuanke.com/t/42400 这还是去年去现场赛打的,当时菜的不行,就白给了。最近学了主席树套树状数组,感觉好强的数据结构啊。我们学长说这题挺简单,建字典树dfs序,跑cdq分治就好了(%%%)。本菜鸡发现这题主席树套树状数组也能做。 题意:给你n个 ...
分类:
其他好文 时间:
2020-04-15 16:32:05
阅读次数:
135
题意: 给出一棵n个点的树,带权值,问两点之间简单路径长度 $\leq k$ 的点对的个数。 分析: 点分治。 代码【模板】: ...
分类:
其他好文 时间:
2020-04-14 12:38:35
阅读次数:
65
概念 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法。 该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列; 即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 过程 ...
分类:
编程语言 时间:
2020-04-14 12:20:35
阅读次数:
87
一:解题思路 方法一:之前做过一道合并2个链表的题目,那么第一种方法就是将数组中的链表两两合并,得到最后的结果。Time:O(k*n),Space:O(1) 方法二:采用分治法,两两合拼。不断递归,最后只剩下一个链表。Time:O(n*log(k)),Space:O(log(k)) 二:完整代码示例 ...
分类:
其他好文 时间:
2020-04-13 22:48:50
阅读次数:
75
java代码(long需要改变) import java.util.Arrays; import java.util.Scanner; public class 大数乘法 { public static void main(String[] args) { Scanner in = new Scan ...
分类:
其他好文 时间:
2020-04-12 16:47:07
阅读次数:
65