TGViewer
Java Backend | YeaHub Java Backend | YeaHub @yeahub_java_backend · 920 subscribers
Post #310 224
#ЛитКод
Задача: 636. Exclusive Time of Functions

На однопоточном процессоре выполняется программа, содержащая n функций. Каждая функция имеет уникальный ID от 0 до n-1. Вызовы функций хранятся в стеке вызовов: когда начинается вызов функции, ее ID заталкивается в стек, а когда вызов функции заканчивается, ее ID выгружается из стека. Функция, чей идентификатор находится в верхней части стека, является текущей выполняемой функцией. Каждый раз, когда функция запускается или завершается, мы пишем лог с идентификатором, началом или завершением и меткой времени. Вам предоставляется список logs, где logs[i] представляет собой i-е сообщение лога, отформатированное как строка "{function_id}:{"start" | "end"}:{timestamp}". Например, "0:start:3" означает, что вызов функции с идентификатором 0 начался в начале временной метки 3, а "1:end:2" означает, что вызов функции с идентификатором 1 завершился в конце временной метки 2. Обратите внимание, что функция может быть вызвана несколько раз, возможно, рекурсивно. Исключительное время функции - это сумма времен выполнения всех вызовов функции в программе. Например, если функция вызывается дважды, причем один вызов выполняется за 2 единицы времени, а другой - за 1 единицу, то эксклюзивное время равно 2 + 1 = 3. Верните эксклюзивное время каждой функции в массив, где значение по i-му индексу представляет собой эксклюзивное время для функции с идентификатором i.

Пример:
Input: n = 2, logs = ["0:start:0","1:start:2","1:end:5","0:end:6"]
Output: [3,4]


👨‍💻 Алгоритм:

1⃣Парсинг логов: Пройдитесь по каждому логу, чтобы распознать действие (start или end) и идентификатор функции вместе с временной меткой.

2⃣Использование стека: Используйте стек для отслеживания текущих вызовов функций. Если лог содержит start, добавьте функцию в стек и начните отсчет времени. Если лог содержит end, снимите функцию со стека и обновите эксклюзивное время.

3⃣Обновление времени выполнения: Когда функция завершает выполнение, обновите ее эксклюзивное время и также учитывайте время выполнения вложенных функций.

😎 Решение:
import java.util.*;

public class Solution {
public int[] exclusiveTime(int n, List<String> logs) {
Stack<Integer> stack = new Stack<>();
int[] times = new int[n];
int prevTime = 0;

for (String log : logs) {
String[] parts = log.split(":");
int fid = Integer.parseInt(parts[0]);
String type = parts[1];
int time = Integer.parseInt(parts[2]);

if (type.equals("start")) {
if (!stack.isEmpty()) {
times[stack.peek()] += time - prevTime;
}
stack.push(fid);
prevTime = time;
} else {
times[stack.pop()] += time - prevTime + 1;
prevTime = time + 1;
}
}

return times;
}
}


👉Новости 👉База вопросов
LeetCode Exclusive Time of Functions - LeetCode Can you solve this real interview question? Exclusive Time of Functions - On a single-threaded CPU, we execute a program containing n functions. Each function has a unique ID between 0 and n - 1. Function calls are stored in a call stack [https://en.wik…
  • ❤ 3
More from @yeahub_java_backend
  1. Oct 9, 2026#podcast #spring 📚 Spring АйО Русскоязычное сообщество Spring-разработчиков с актуальной,…
  2. Oct 8, 2026#Собес #aggregate #function 🤔 Что такое агрегатные функции в SQL? 💬 Кратко: Агрегатные ф…
  3. Oct 7, 2026#Собес #. 🤔 DIS Group задача . 💬 Вопросы: - Что такое Git и GitHub? 👉 Все вопросы из эт…
  4. Oct 5, 2026#Собес #bucket #hashmap 🤔 Что такое bucket в HashMap и что в нем хранится? 💬 Кратко: Buc…
  5. Oct 2, 2026#documentation #яндекс #алгоритмы 📚 Структурный подход к алгоритмам: от теории к практике…
  6. Oct 1, 2026#Собес #LLM #RAG #metrics 🤔 Какие метрики собирал в проектах с LLM/RAG? Как доставлял их…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →