力扣1172.餐盘栈

力扣1172.餐盘栈

  • 优先队列 + 栈

    • 优先队列维护所有非满栈下标
cpp 复制代码
  class DinnerPlates {
      int k = 0;
      vector<stack<int>> stacks;
      priority_queue<int,vector<int>,greater<>> idx;
  public:
      DinnerPlates(int capacity) {
          k = capacity;
      }
      
      void push(int val) {
          //处理所有越界下标
          if(!idx.empty() && idx.top() >= stacks.size())
              while(!idx.empty()) idx.pop();
          if(idx.empty())
          {
              stack<int> st;
              st.push(val);
              stacks.emplace_back(st);
              if(k > 1)
                  idx.push(stacks.size() - 1);
          }
          else
          {
              auto &st = stacks[idx.top()];
              st.push(val);
              //满了就弹出队列
              if(st.size() == k)
                  idx.pop();
          }
      }
      
      int pop() {
          //相当于删最后一个
          return popAtStack(stacks.size() - 1);
      }
      
      int popAtStack(int index) {
          //不合法操作
          if (index < 0 || index >= stacks.size() || stacks[index].empty())
              return -1;
          auto &st = stacks[index];
          //如果是满栈,删了以后必定不满,如果是非满栈,则一定已经在队列里了
          if(st.size() == k)
              idx.push(index);
          int val = st.top();
          st.pop();
          //处理尾部空栈
          while(!stacks.empty() && stacks.back().empty())
              stacks.pop_back();
          return val;
      }
  };
相关推荐
vibecoding日记13 小时前
双非如何快速入职字节等大厂大模型?真实案例分析:推理优化和投机解码
算法·求职·大模型工程师
yszaygr213815 小时前
Verilog参数化游程编码RLE模块
算法
望易15 小时前
刚设计的大模型架构-双域耦合认知框架
算法·架构
复杂网络19 小时前
多个 Claude Code 与多个 Codex 协同工作:设计与实现方案
算法
HjhIron1 天前
面试常客:字符串算法从入门到进阶
算法·面试
吴佳浩2 天前
DeepSeek DSpark:Confidence-Scheduled Speculative Decoding 技术解析
人工智能·算法·deepseek
触底反弹2 天前
🧠 搞懂 Token,才算真正入门大模型——从分词原理到 Embedding 语义实战
javascript·人工智能·算法
vivo互联网技术2 天前
ICLR 2026 | 基于后验采样的图像恢复方法LearnIR:人脸去阴影、去雾
人工智能·算法·aigc
浮生望2 天前
JS字符串与回文算法:从包装类到双指针的面试进阶之路
javascript·算法