1.算法思路: 选择一个基准点,将数组中比基准点小的值移到基准值左边,比基准值大的移到基准值右边。然后递归调用,将基准值左右两边的数组做同样操作,递归结束的条件是数组只有一个元素。 基准点归位的方法: 设一头一尾两个指针,右指针向左找比第一个基准值小的数,左指针向右找第一个比基准值大的数,找到后交换 ...
分类:
编程语言 时间:
2019-10-26 01:21:58
阅读次数:
81
package main import ( "fmt" "time" ) // 桶 type LeakBucket struct { capacity int // 容量,固定时间语序访问次数 interval time.Duration // 允许访问的时间间隔 dropsNum int // 固... ...
分类:
编程语言 时间:
2019-10-24 23:49:01
阅读次数:
138
1.算法思路: (1)将待排序数组分为两份,利用递归将两份数组排好序 (2)将两个有序数组归并成一个有序数组。 实现方法: a.设置两个指针,分别指向两个数组的开头,比较指针所指向的数字,将较小的数字加入一个辅助数组中,指针前移,直到其中一个指针溢出 b.将未溢出的数组剩余的元素加入辅助数组中 c. ...
分类:
编程语言 时间:
2019-10-22 21:56:43
阅读次数:
108
凸包问题 分治法 求能够完全包含平面上n个给定点的凸多边形。 示例: 一、分治法: (一)算法思路: (这里所说的直线都是有向直线的。) 将数组升序排序,若x轴坐标相同,按照y轴坐标升序排序。 最左边的点p1和最右边的点p_n一定是该集合凸包的顶点。该直线将点分为两个集合,上包为S1,下包为S2。在 ...
分类:
编程语言 时间:
2019-10-19 11:17:02
阅读次数:
148
一、顺序搜索 顺序搜索 是最简单直观的搜索方法:从列表开头到末尾,逐个比较待搜索项与列表中的项,直到找到目标项(搜索成功)或者 超出搜索范围 (搜索失败)。 根据列表中的项是否按顺序排列,可以将列表分为 无序列表 和 有序列表。对于 无序列表,超出搜索范围 是指越过列表的末尾;对于 有序列表,超过搜 ...
分类:
编程语言 时间:
2019-10-06 23:18:38
阅读次数:
176
1>团伙 虚点+并查集 将i+n当做桥梁,作为敌人敌人关系转化的桥梁 朋友的朋友是朋友,朋友的敌人是敌人 敌人的敌人是朋友,敌人的朋友是敌人 2>关押罪犯 虚点+并查集 思路同上 方法二:二分算法 思路来自题目中的单调性, check就是由二分图的染色判断写出来的 3> ...
分类:
其他好文 时间:
2019-10-06 13:10:30
阅读次数:
69
算法思路就不说了,其实比较简单 这里讲一下坑点: 1.虽然我们可以将边权压到点上,但是当根不同时,差分数组显然不同。所以我们不能真的将边权看做点权,换根时还是要将其当做边权来考虑。 1.更新时,我们设dp[u]表示u节点为根时的最大价值,由于经过点u后,点v的儿子将变成点u,所以此时我们要更新点v的 ...
分类:
其他好文 时间:
2019-10-01 22:14:28
阅读次数:
94
思路 :先把所有的边排个序,然后枚举所有的边(从小到大),如果当前边所连的两个点并没有在同一个集合里(这一可以用并查集来实现)(需要判断两个点是否已经连通,如果已经连通了,那么再用这条边连一遍就没有什么意义了),就连上这条边了。如果已经连了n - 1条边(n - 1条边就可以将一个图变为一个连通图) ...
分类:
编程语言 时间:
2019-09-24 21:12:46
阅读次数:
100
线性筛 ~~我已经掌握埃氏筛了~~ 为什么还要学线性筛??? 线性筛的时间复杂度是严格 $O(N)$ 的, 而埃氏筛的复杂度是 $ O(N log_{2}( log_{2}(N) ) $ 看上去并没有快多少 ~~实际也是~~, 但在处理一些大数据时,差距就凸显出来了 算法思路 概述: 和埃氏筛类似的 ...
分类:
其他好文 时间:
2019-09-15 11:00:05
阅读次数:
298
二分模板 二分模板一共有两个,分别适用于不同情况。 算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。 模板一 当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,其更新操作是r = mid或者l = mid + 1;, ...
分类:
其他好文 时间:
2019-09-15 01:08:28
阅读次数:
82