1、归并排序 基本思路:借助额外空间,合并两个有序数组,得到更长的有序数组。例如:「力扣」第 88 题:合并两个有序数组。 算法思想:分而治之(分治思想)。「分而治之」思想的形象理解是「曹冲称象」、MapReduce,在一定情况下可以并行化。 public class Solution { // 归 ...
分类:
编程语言 时间:
2020-06-28 18:15:49
阅读次数:
60
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。 ...
分类:
编程语言 时间:
2020-06-28 00:09:58
阅读次数:
71
基本思想:分治。 归并排序是以数组的中间点来分。 时间复杂度确定是nlogn 1:确定分界点mid = (l + r) / 2,是下标的中间值。 2:递归排序左右两边。排完序后,左右两边都是有序的了。 3:归并。把两个有序的数组,归并成一个有序的数组。 1 #include <bits/stdc++ ...
分类:
编程语言 时间:
2020-06-27 14:43:03
阅读次数:
68
快速排序的基本思想是分治。 快速排序的步骤: 假设区间是从l到r的话 1:确定分界点x。在要排序的数组内找到一个数作为分界点x。(q[l], q[(l + r) / 2], q[r], 随机值) 2:划分区间。使得左区间里的数都小于等于x,右区间里的数都大于等于x。快速排序是选择一个数来划分区间。 ...
分类:
编程语言 时间:
2020-06-27 13:17:22
阅读次数:
57
给定一棵大小为 \(n\) 的树,每个结点都有颜色。 定义 \(s(i, j)\) 为从 \(i\) 到 \(j\) 的不同颜色数量以及 \(sum_i = \sum\limits_{j= 1}^ns(i,j)\)。 求出所有的 \(sum_i\)。 较为复杂的点分治题。 也可以用差分 \(O(n) ...
分类:
其他好文 时间:
2020-06-27 13:15:18
阅读次数:
52
题目做法大概就是点分治然后背包 前置知识 点分治 应用场景: 求树上距离为k的点对数|是否存在 路径为k且有限制条件 总之就是dfs暴力会超时的优化 点分治第一步首先要找到一棵树的重心 然后再根据重心来进行分治 judge i 距离当前根为i的点是否存在 dis i 点i与当前根的距离 点分治模板 ...
分类:
其他好文 时间:
2020-06-25 21:29:02
阅读次数:
48
二分算法(未完) 前言 二分属于分治的一种,很多题都需要用到这种高效简洁的算法 所以,二分是必掌握的算法,这篇博客就是我的二分的学习记录qwq 目录 二分算法知识 整数集合上的二分 实数域上的二分法 二分法的常见模型 二分答案题目 二分答案题解 二分查找题目 二分查找题解 二分 PS:以下部分内容摘 ...
分类:
其他好文 时间:
2020-06-24 16:05:26
阅读次数:
47
一、分治法 时间复杂度:O(NlogN) 通过70%样例,超时 import java.util.*; public class Main { static int res = 0; static void solution(int[] a, int i, int j, int x) { if(i ...
分类:
其他好文 时间:
2020-06-24 00:41:01
阅读次数:
65
因为点分治写挂少了70分,真是不应该。。。 原因是点分时求连通块大小的totsz没有清空。 其实我觉得吧还是写代码习惯的问题,到目前为止自己还没有形成稳定的码风,以至于在考场上写模板还要纠结实现的细节,而且每次打点分治模板打出来的样子都不一样,结果每次都换一种写法换着换着就写挂了。 说实话代码实现一 ...
分类:
其他好文 时间:
2020-06-23 13:40:35
阅读次数:
55
归并排序采用了分治法的原理,将原先完整的数组拆分成一个一个的单独数组,然后再通过将这些单独的数组一一进行大小比较,汇聚成一个个较大的数组,最后再汇聚成一个完整的数组 这个地方需要说明的是:merge就是汇聚的过程,而mergeSort就是分治法的体现 代码可以进一步的优化,抽时间再解决吧 #incl ...
分类:
编程语言 时间:
2020-06-22 01:42:11
阅读次数:
73