2025.11.23笔记

2025.11.23笔记

  一、双端栈

    形式:

     两个栈对开↓↓↓
image


  二、双端队列

    形式:

     定义一个队列两端都可以弹入弹出

     STL:deque、list
     用一个数组模拟:
    定义head节点和end节点,初始位置在数组中间
    如果-
      1.队头插入:head指针向前移动一位存入该数
      2.队头删除:head++
      3.队尾插入:end指针向后移动一位存入该数
      4.队尾删除:end--

  三、单调队列

    主要用途:滑动窗口

    暴力法复杂度O(nk)
    单调队列复杂度O(n)

    (双端队列的衍生)
  --每次判断当前数字与队头的大小来判断当前队头是否需要出队来确保队列的单调性--

    单调性:单调递增、单调递减
    #define ll long long
    ll n,k;
    deque<ll> q;
    ll a[1000010];
    cin>>n>>k;
    for(ll i=1;i<=n;i++)
        cin>>a[i];
    for(ll i=1;i<=n;i++)
    {
        while(!q.empty()&&a[i]<a[q.back()])q.pop_back();
        q.push_back(i);
        while(!q.empty()&&q.front()+k-1<i)q.pop_front();
        if(i>=k)
            cout<<a[q.front()]<<' ';
    }
    cout<<'\n';
    q.clear();
    for(ll i=1;i<=n;i++)
    {
        while(!q.empty()&&a[i]>a[q.back()])q.pop_back();
        q.push_back(i);
        while(!q.empty()&&q.front()+k-1<i)q.pop_front();
        if(i>=k)
            cout<<a[q.front()]<<' ';
    }

  四、优先队列

    优先队列类似于堆,保持队列的单调性,插入及删除复杂度log级、查询最值的复杂度为O(1)

  五、ST表

    ST表是一种基于倍增思想的数据结构,不支持修改

  六、树的孩子兄弟表示法

    将任意多叉树转换为二叉树

     定义:

        该节点的左子节点为该节点的儿子,右子节点为该节点的兄弟

image

posted @ 2025-11-23 10:43  Guojunning  阅读(0)  评论(0)    收藏  举报