分类: 算法与数据结构

8 篇文章

快速排序
快排的平均时间复杂度为O(nlogn),最坏时间复杂度为O(n²),空间复杂度为O(1),快排是不稳定的。快排适用于乱序数组,排序快。快排面临的最坏情况就是排序一个已经排序好的数组。 快排的基本概念:选取一个元素作为基准,然后调整元素位置,使得基准左边的元素都小于他,右边的都大于他,然后递归执行,即可排序完整个数组。每一趟基本流程: 选取最左侧元素…
算法竞赛一些小技巧
oi.wiki列出的算法和数据结构等等知识非常全面,可以作为一本参考书。 建数组的时候可以留出第0个元素不使用,因为有时候题目的序号是从1开始的,这样方便一些,而且有时候可能会需要一些递推公式,这样第一个元素之前就能够刚好有一个元素可以进行递推。
五子棋和井字棋AI算法代码
代码如下 // @ts-check export default { tempSymbol: 0, // 绝对为0,表示棋盘上的空位置 mySymbol: 0, // 我方棋子,当自己是先手的时候表示1,当自己是后手的时候表示2 opSymbol: 0, // 对方棋子,当对方是先手的时候表示1,当对方是后手的时候表示2 hasPut: false…
elevator saga的游戏代码
游玩网址 https://play.elevatorsaga.com 下面的代码均是我自己写的 1到7关:(通过率不是100%,但是多试几次总能通过) { init: function(elevators, floors) { let floor_dest = []; for (let i = 0; i < floors.length…
【模板】树状数组
题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某一个数加上 $x$ 求出某区间每一个数的和 输入格式 第一行包含两个正整数 $n,m$,分别表示该数列数字的个数和操作的总个数。 第二行包含 $n$ 个用空格分隔的整数,其中第 $i$ 个数字表示数列第 $i$ 项的初始值。 接下来 $m$ 行每行包含 $3$ 个整数,表示一个操作,具体如…
大小写字母的相互转化
ASCII中大小写字母刚好是差了32,而大写字母的32那一位刚好都是0,小写字母的刚好都是1。所以拿到一个字符char c,只需要执行(c^32)就是它的对应的另一个大写字母或者小写字母。
【模板】并查集
题目描述 如题,现在有一个并查集,你需要完成合并和查询操作。 输入格式 第一行包含两个整数 $N,M$ ,表示共有 $N$ 个元素和 $M$ 个操作。 接下来 $M$ 行,每行包含三个整数 $Z_i,X_i,Y_i$ 。 当 $Z_i=1$ 时,将 $X_i$ 与 $Y_i$ 所在的集合合并。 当 $Z_i=2$ 时,输出 $X_i$ 与 $Y_i…