数据结构
poinner…
只要剪汁儿剪的好
展开
-
火车进站
题目链接火车进站这道题乍一看很可能会看成求数字的全排列,我就是犯了这个错误。其实这题求得是符合一定条件的全排列,也就是说题目要求的输出序列只是全排列的一部分。那输出的序列需要满足哪些要求呢(=?=)其实我们可以通过模拟得出结果,通过模拟火车进站、出站可以将整个过程分为三个状态,在这里记为A,B,C,A代表已经出站的火车(也就是已经排好序的序列),B代表此时正在站中的火车,C代表还未进站的火车。可以发现,C中的数字一定是大于A或B中的数字的,假设我们已经放了k个数字,那么我们接下来只可以进行两种操作原创 2021-03-03 15:50:06 · 580 阅读 · 1 评论 -
最小生成树--Kruskal算法
最小生成树有两种解法一种是prim,也就是贪心,从第一个点A开始,找与之相连的边权最小的点B,然后再从B开始,找与B相连的边权最小的点…以此类推,时间复杂度n2所以prim适合求边和点比较少的图第二种就是Kruskal了,这个方法主要用到了并查集的思想,把每个点看成一个集合,先对所有的边按权重排个序,然后依次枚举每条边上的两个点是否属于同一个集合,如果不属于就合并两个集合,例题代码如下:#include<iostream>#include<algorithm>#inc原创 2021-04-15 10:06:52 · 210 阅读 · 0 评论 -
八皇后
1432. 棋盘挑战给定一个 N×N的棋盘,请你在上面放置 N个棋子,要求满足:每行每列都恰好有一个棋子每条对角线上都最多只能有一个棋子 1 2 3 4 5 6 -------------------------1 | | O | | | | | -------------------------2 | | | | O | | | -------------------------3 | | | |原创 2021-01-22 20:31:44 · 136 阅读 · 0 评论 -
排序算法
1、冒泡法#include<iostream>using namespace std;int main(){ int n; cin>>n; int *an=new int[n]; for(int i=0;i<n;i++)cin>>an[i]; for(int i=n-1;i>=0;i--){ int flag=1;//如果在一次循环中没有发生交换则直接退出 for(int j=0;j<i;j++){ if(an[j]>.原创 2020-12-20 16:41:38 · 111 阅读 · 1 评论 -
c++对AVL树的简单实现
#include<iostream>#include<queue>using namespace std;typedef class poinner* on;class poinner{//AVL树定义 public: int val; on left,right; poinner():val(0),left(nullptr),right(nullptr){} poinner(int val):val(val),left(nullptr),right(nullptr原创 2020-12-10 13:58:15 · 152 阅读 · 0 评论 -
c++对堆的简单实现
#include<iostream>using namespace std;typedef class poinner* on;class poinner{ public: int size;//当前尺寸 int capacity;//容量 int* poin;//数组指针 };on create(int Maxsize){//初始化 on h=new poinner(); h->size=0; h->capacity=Maxsize; h-&g原创 2020-12-09 11:50:18 · 179 阅读 · 0 评论 -
c++对树的简单实现
#include<iostream>#include<queue>#include<stack>using namespace std;class poinner{//树 public: int val; poinner*right,*left; poinner(int val){ this->val=val; right=nullptr; left=nullptr; }};poinner* create(int val){//初原创 2020-12-08 22:10:15 · 530 阅读 · 2 评论