算法题
各平台上算法题
岛上的道长
努力达到学校的平均水平。
展开
-
红黑树的原理及其简单实现
短期实习比较闲,摸鱼撸个RBT红黑树原理首先阐述红黑树(RBT)的原理,RBT在二叉排序树(BST)的基础上又添加了下述的五条约束:每个节点有颜色属性,要么是红色,要么是黑色。根节点必为黑色叶子节点下的空节点视为黑色红色节点的左右孩子必为黑色节点从红黑树上的任意一个节点出发到任意一个叶子节点的简单路径上,黑色节点的个数一致。(黑高相同)需要说明的是,很多博客中会告诉你叶子节点必须是黑色,实际上它指的是颜色是黑色的NIL空节点,本质上就是叶子节点两侧的空节点是黑色,从而方便理解。实现过程中原创 2020-06-23 13:29:25 · 196 阅读 · 0 评论 -
PAT 乙级 1050 螺旋矩阵(25 分)
1050 螺旋矩阵(25 分)本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N;m≥n;且 m−n 取所有可能值中的最小值。 输入格式: 输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数。所有数字不超过 10^4,相...原创 2018-08-08 16:57:41 · 801 阅读 · 0 评论 -
PAT 乙级 1049 数列的片段和(20 分)
1049 数列的片段和(20 分)给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段。例如,给定数列 { 0.1, 0.2, 0.3, 0.4 },我们有 (0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.3, 0.4) (0.3) (0.3, 0.4) (0.4) 这 10...原创 2018-08-08 14:24:10 · 290 阅读 · 0 评论 -
皇后问题
皇后问题皇后问题描述如下:在一个n*n的棋盘上放上n个皇后,确保两两皇后之间不在同一列,同一行,同一对角线上,并给出最后满足条件的方法数量。这其实是一个全排列的问题的变种,棋子的列对应全排列问题中输出序列的index,棋子的行对应全排列问题的每个数。显而易见,每一行放入一个棋子后这行就不能再使用了,就相当于全排列问题中每一个数在排列中用过一遍后就不能再用了。每一行对应的列就相当于全排列问题...原创 2018-09-16 23:10:56 · 299 阅读 · 0 评论 -
选择排序
为了准备PAT甲级,开始复习数据结构与算法了,先从最简单的几个排序算法之一,选择排序开始。 简单选择排序的思路是下标i从0到n-1开始遍历,寻找i到n-1中的最小元素与第i个元素相交换,从而实现排序。这样的排序要二重循环,时间复杂度是n^2。下面是代码#include<iostream>#include<stdlib.h>#include<vecto...原创 2018-09-10 21:18:39 · 104 阅读 · 0 评论 -
插入排序
插入排序也是最基础的排序算法之一。 假设从下标为0到下标为i的元素为已经排序完毕的元素,将下标为i+1的元素插入到0至i中合适的位置,完成一次排序。i从1到n-1进行遍历,即完成插入排序。插入排序的时间复杂度为n^2代码如下所示:#include<iostream>#include<stdlib.h>#include<vector>#incl...原创 2018-09-10 21:38:30 · 114 阅读 · 0 评论 -
全排列问题
全排列问题全排列简而言之是对于一个给定序列,给出其所有元素的所有排列情况。称之为一个序列的全排列。不难得出一个长度为n的序列,所有的全排列情况为n!种。 这里以n=3为例。1 2 31 3 22 1 32 3 13 2 13 1 2一共六种情况。全排列是一个典型的递归问题,每次固定一个值为i的元素在index位置上,接下来对长度为n-1的序列再做这个操作,直到index...原创 2018-09-15 00:51:39 · 226 阅读 · 0 评论