Untitled

 avatar
unknown
java
2 years ago
1.3 kB
6
Indexable
public static List<Integer> getTotalExecutionTime(int n, List<String> logs) {
    
    List<Integer> functionExecutionTimes = new ArrayList<>(Collections.nCopies(n, 0));
    Stack<Integer> functionStack = new Stack<>();
    int lastTimestamp = 0;

    for (String logEntry : logs) {
        String[] parts = logEntry.split(":");
        int functionId = Integer.parseInt(parts[0]);
        String event = parts[1];
        int currentTimestamp = Integer.parseInt(parts[2]);

        if (event.equals("start")) {
            if (functionStack.isEmpty()) {
                functionStack.push(functionId);
                lastTimestamp = currentTimestamp;
                continue;
            }

            int topFunction = functionStack.peek();
            functionExecutionTimes.set(topFunction, functionExecutionTimes.get(topFunction) + currentTimestamp - lastTimestamp);
            lastTimestamp = currentTimestamp;
            functionStack.push(functionId);

        } else {
            int poppedFunctionId = functionStack.pop();
            functionExecutionTimes.set(poppedFunctionId, functionExecutionTimes.get(poppedFunctionId) + currentTimestamp - lastTimestamp + 1);
            lastTimestamp = currentTimestamp + 1;
        }
    }

    return functionExecutionTimes;
    
}
Editor is loading...
Leave a Comment