Untitled
unknown
java
2 years ago
1.3 kB
8
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