备战蓝桥杯第五模块之数据结构

前言

本系列是我学习完大佬的方法后,为了蓝桥杯前几天可以快速过一遍所做,所以部分内容会很简洁。如果能够帮助到你,我也会很开心!!!

单调栈

对于每个数,观察他的左边比他大的数的第一个坐标是什么,如果有的话就输出那个数的坐标,如果没有的话就输出-1(找比他大的值的坐标)

for (int i = 0; i <= n; i++)
{
	while (top && a[stk[top] <= a[i]]) top--;
	if (!top) printf("-1 ");//如果栈空,则没有比该元素小的值。
    else printf("%d ", stk[tt]);
	skt[++top] = i;
}

单调队列 

常用题目:滑动窗口/求某个区间的最小值

for (int i = 1; i <= n; i++)
{
    while (hh <= tt && q[hh] < i - k + 1) hh++;//判断当前区间是否合法
    while (hh <= tt && a[q[tt]] > a[i]) tt--;
    q[++tt] = i;//存入下标
}

  其

你可能感兴趣的:(备战蓝桥杯,数据结构,蓝桥杯,算法,c++,c语言)