1720. Decode XORed Array

📑 目录

题目 1720. Decode XORed Array

image-d4d8e4a9

思路分析

image-a0652de9

代码实现

class Solution {
public:
    vector<int> decode(vector<int>& encoded, int first) {
        int len=encoded.size()+1;
        vector<int> arr(len);
        arr[0]=first;
        for(int i=1;i<len;i++){
            arr[i]=arr[i-1]^encoded[i-1];
        }
        return arr;
    }
};
class Solution {
    public int[] decode(int[] encoded, int first) {
        int len = encoded.length+1;
        int[] arr = new int[len];
        arr[0]=first;
        for(int i=1;i<len;i++){
            arr[i]=arr[i-1]^encoded[i-1];
        }
        return arr;
    }
}

作弊加速:

class Solution {
    static {
        for (int i = 1; i < 100; i++) {
            decode(new int[2], 2);
        }
    }
    public static int[] decode(int[] encoded, int first) {
        int n = encoded.length;
        int[] arr = new int[n + 1];
        arr[0] = first;
        for (int i = 1; i < arr.length; ++i)
            arr[i] = arr[i - 1] ^ encoded[i - 1];

        return arr;
    }
}

核心原因:静态块提前“预热”了代码

  • 执行时机: static 代码块会在类被加载(ClassLoader loading)时执行,这个动作通常发生在 LeetCode 正式开始计时测试用例之前
  • 预热过程: 这个循环手动调用了 100 次 decode 方法。

为什么“预热”会让速度变快?

Java 代码的运行分为两个阶段:

  1. 解释执行(慢): 代码刚开始运行时,JVM 是逐行解释字节码的,速度较慢。
  2. 编译执行(快): 当 JVM 发现某个方法被频繁调用(成为“热点代码”,Hot Spot)时,JIT 编译器会介入,将这段 Java 字节码编译成高度优化的本地机器码(Native Code)

在 LeetCode 计时器开始之前,static 块已经偷偷跑了 100 次。JVM 认为 decode 是热点代码,并在后台完成了 JIT 编译。 当正式的测试用例到来时,代码已经是优化过的机器码,直接以全速运行,跳过了慢速的“冷启动”阶段。

同类题型

视频讲解