返回

洞悉函数执行时间:LeetCode 11 的栈实现探究

前端

导言

踏入编程的奇妙世界,我们经常需要深入了解代码的执行时间,以优化性能并确保应用程序顺畅运行。LeetCode 11 提供了一个引人入胜的挑战,让我们利用栈数据结构,揭开函数执行时间的奥秘。

算法剖析:栈的非凡力量

LeetCode 11 问题的关键在于理解栈的先入后出的特性。栈是一种数据结构,它遵循一个简单的原则:最后进入的元素(函数)将第一个离开。这为我们解决问题提供了一个理想的工具。

我们使用栈来跟踪函数调用的顺序。当一个函数被调用时,它会被压入栈中。当函数返回时,它将从栈中弹出。通过这种方式,我们始终跟踪当前正在执行的函数。

步步为营:深入理解算法

算法的实施可以分为几个步骤:

  1. 初始化栈: 创建一个空的栈。
  2. 遍历函数调用: 对于函数调用的序列,依次执行以下步骤:
    • 函数被调用时,将其压入栈中。
    • 函数返回时,将其从栈中弹出。
  3. 计算执行时间: 当函数从栈中弹出时,计算从函数被调用到返回所花费的时间。
  4. 返回执行时间: 最终返回所有函数执行时间的总和。

代码示例:Java 中的优雅实现

import java.util.Stack;

class Solution {
    public int[] exclusiveTime(int n, List<String> logs) {
        Stack<Integer> stack = new Stack<>();
        int[] result = new int[n];
        int prevTime = 0;
        
        for (String log : logs) {
            String[] parts = log.split(":");
            int id = Integer.parseInt(parts[0]);
            int time = Integer.parseInt(parts[2]);
            if (parts[1].equals("start")) {
                if (!stack.isEmpty()) {
                    result[stack.peek()] += time - prevTime;
                }
                stack.push(id);
                prevTime = time;
            } else {
                result[stack.pop()] += time - prevTime + 1;
                prevTime = time + 1;
            }
        }
        return result;
    }
}

结语:洞悉函数执行时间的真谛

通过探索 LeetCode 11,我们不仅掌握了栈数据结构的妙用,还深入理解了函数执行时间的计算过程。借助这些知识,我们可以优化代码性能,确保应用程序在竞争激烈的数字世界中脱颖而出。