首页 > 其他分享 >LeetCode/函数的独占时间

LeetCode/函数的独占时间

时间:2022-08-19 00:23:35浏览次数:45  
标签:函数 独占 timestamp st res 标识符 LeetCode logs

有一个单线程CPU 正在运行一个含有 n 道函数的程序。每道函数都有一个位于 0 和 n-1 之间的唯一标识符
函数调用存储在一个调用栈 上 :当一个函数调用开始时,它的标识符将会推入栈中。而当一个函数调用结束时,它的标识符将会从栈中弹出。标识符位于栈顶的函数是 当前正在执行的函数 。每当一个函数开始或者结束时,将会记录一条日志,包括函数标识符、是开始还是结束、以及相应的时间戳

给你一个由日志组成的列表 logs ,其中 logs[i] 表示第 i 条日志消息,该消息是一个按 "{function_id}:{"start" | "end"}:{timestamp}" 进行格式化的字符串
以数组形式返回每个函数的 独占时间 ,其中第 i 个下标对应的值表示标识符 i 的函数的独占时间

输入:n = 2, logs = ["0:start:0","1:start:2","1':'end:5","0':'end:6"]
输出:[3,4]

使用栈和正则读取字符串数据,每次处理计算相邻进程的时间

class Solution {
public:
    vector<int> exclusiveTime(int n, vector<string>& logs) {
        //只关心局部,而不关心全局
        stack<pair<int,int>> st;
        vector<int> res(n);
        for(auto&log:logs){
            char type[10];
            int idx,timestamp;
        //正则匹配需要的数据
         sscanf(log.c_str(),"%d:%[^:]:%d",&idx,type,&timestamp);
            if(type[0]=='s'){//如果标识函数是开始操作
                if(!st.empty())//前面的函数没有结束
                    //先给前一个函数计算运行时间
                res[st.top().first]+=timestamp-st.top().second;
                st.push(pair(idx,timestamp));//入栈
            }
            else{
                auto t = st.top();
                st.pop();
                res[t.first]+=timestamp-t.second+1;//注意开始和末尾
                if(!st.empty())
                    //换起始点计算上一层函数的时间
                    st.top().second = timestamp+1;
            }
        }
        return res;
    }
};

标签:函数,独占,timestamp,st,res,标识符,LeetCode,logs
From: https://www.cnblogs.com/929code/p/16600618.html

相关文章

  • leetcode 304. Range Sum Query 2D - Immutable 二维区域和检索 - 矩阵不可变(中等)
    一、题目大意https://leetcode.cn/problems/range-sum-query-2d-immutable给定一个二维矩阵matrix,以下类型的多个请求:计算其子矩形范围内元素的总和,该子矩阵的左上角......
  • 【LeetCode】101.对称二叉树
    【LeetCode】101.对称二叉树/* *转载请说明出处与作者*作者:多巴胺dopamine*/一问题描述1题目给你一个二叉树的根节点root,检查它是否轴对称。示例1:输......
  • c语言中函数式宏和逗号运算符
     001、#include<stdio.h>#definexxx(str){putchar('\a');puts(str);}//函数使用;花括号内为完整的代码块,末尾有分号,因此main函数ti第一个if之后不再加......
  • c语言中函数式宏
     001、#include<stdio.h>#definediff(x,y)(x-y)##函数式宏,diff函数中的参数,将按照(x-y)在函数中展开intmain(void){inta,b;doublem,n......
  • 函数的递归
    2.函数的递归的定义函数的递归调用:是函数嵌套调用的一种特殊形式具体是指:在调用一个函数的过程中又直接或者间接的调用到本身,是一个死循环,最大递归是1000次,超出之后报错......
  • 2022-08-18 第六小组 张宁杰 MySQL数据库(3)MySQL常用函数
    MySQL常用函数聚合函数count:计数。count(*)≈count(1)>count(主键)count(*):MySQL对count(*)底层优化,count(0)。count(1)count(主键)count(字段)min:最小值max:最......
  • 洛谷P4726 【模板】多项式指数函数(多项式 exp)
    题目https://www.luogu.com.cn/problem/P4726思路(略)是个板题,但是包含了很多多项式的基础板子,适合用来练手。据说递归版的好写(好抄),但是我猜测和fft类似,迭代版的应该常......
  • leetcode415_字符串相加
    字符串相加模拟手算:(1)注意对其最低项(2)注意进位publicStringaddStrings(Stringnum1,Stringnum2){inti=num1.length()-1;intj=num2.......
  • assert 断言函数及用法
    Python assert语句,又称断言语句,可以看做是功能缩小版的if语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行;反之,Python解释器会报AssertionError错误......
  • pgsql存储函数简单使用
    CREATEORREPLACEFUNCTION"public"."generate_road_list_id_to_jcpddas"("road_code_param"varchar)RETURNS"pg_catalog"."int4"AS$BODY$declarereturnvalue......