力扣636.函数的独占时间

  • 用一个对组栈存每个start数据,first为编号,second为开始时间

    • start时:若栈为空 直接入栈
      • 若不为空 处理前一段已独占的时间
    • end时:将自己的独占时间处理了
      • 若栈非空 将栈顶元素的开始时间更新为当前时间+1
      • 因为前面所有时间都已处理过 不用管了
  •   class Solution {
      public:
          vector<int> exclusiveTime(int n, vector<string>& logs) {
              vector<int> ans(n,0);
              stack<pair<int,int>> st;
              for(auto t:logs)
              {
                  int num=0;
                  int idx=0;
                  while(t[idx] != ':')
                  {
                      num = num * 10 + t[idx] - '0';
                      idx ++;
                  }
                  idx ++;
                  if(t[idx] == 's')
                  {
                      idx += 6;
                      int ti = 0;
                      while(idx < t.size())
                      {
                          ti = ti * 10 + t[idx] - '0';
                          idx ++;
                      }
                      if(st.empty()) st.push({num,ti});
                      else
                      {
                          ans[st.top().first] += ti - st.top().second;
                          st.push({num,ti});
                      }
                  }
                  else
                  {
                      idx += 4;
                      int ti = 0;
                      while(idx < t.size())
                      {
                          ti = ti * 10 + t[idx] - '0';
                          idx ++;
                      }
      
                      ans[st.top().first] += ti - st.top().second + 1;
                      st.pop();
                      if(!st.empty()) st.top().second = ti + 1;
                  }
              }
              return ans;
          }
      };
    

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部