力扣636.函数的独占时间
-
用一个对组栈存每个start数据,first为编号,second为开始时间
- start时:若栈为空 直接入栈
- 若不为空 处理前一段已独占的时间
- end时:将自己的独占时间处理了
- 若栈非空 将栈顶元素的开始时间更新为当前时间+1
- 因为前面所有时间都已处理过 不用管了
- start时:若栈为空 直接入栈
-
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; } };