LeetCode 636. 函数的独占时间**

该博客介绍了一种方法来计算进程的独家执行时间。通过维护一个栈来跟踪当前运行的进程,每次进程切换时更新维持时间。代码中定义了一个`exclusiveTime`函数,它接收日志并返回每个进程的执行时间。关键在于正确处理进程开始和结束的情况,并确保在进程结束时加上额外的一单位时间。
摘要由CSDN通过智能技术生成

具体思路:

没想到可以逐段计算,老想着用栈递归保存;

栈顶为当前运行的进程,而t保留上次切换的时间;

每次进出栈都视为切换,记录每个进程的维持时间即可;

唯一要注意的是运行完是t+1;

具体代码:

class Solution {
public:
    void fun(string s, int& id, bool& flag, int& time) {
        vector<string>vec;
        int index = 0;
        for (int i = 0; i < s.size(); i++) {
            if (s[i] == ':') {
                vec.push_back(s.substr(index,i-index));
                index = i + 1;
            }
        }
        vec.push_back(s.substr(index, s.size() - index));
        id = atoi(vec[0].c_str());
        if (vec[1] == "start")
            flag = true;
        else
            flag = false;
        time= atoi(vec[2].c_str());
        return;
    }

    vector<int> exclusiveTime(int n, vector<string>& logs) {
        vector<int>ret(n,0);
        int time = 0;
        stack<int>st;
        for (int i = 0; i < logs.size(); i++) {
            int id;
            bool flag;
            int t;
            fun(logs[i], id, flag, t);
            if (flag) {
                if (!st.empty()) {
                    ret[st.top()] += t - time;
                }
                st.push(id);
                time = t;
            }
            else {
                ret[st.top()] += t - time + 1;
                time = t+1;
                st.pop();
            }
        }
        return ret;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值