最近开始刷LeetCode上的题目, 第一题 two sum 中, 先使用了一下暴力法, 运行了一下, 发现速度和题目给出的答案有出入, 看了一下, 发现了不同。我的代码如下:
private static int[] twoSum(int[] nums, int target) {
for (int i = 0; i < nums.length - 1; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[i] == target - nums[j]) {
return new int[]{i, j};
}
}
}
return null;
}
而给出的答案稍有不同,第4行的条件语句代码为:
if (nums[j] == target - nums[i])
想了一下,所给答案之所以更快可能是因为JIT(just-in-time)技术发生了作用。因为在每一次最外层的遍历中,target - nums[i] 都是一个定值,在程序的内层遍历中,程序字节码经过JIT环境变量进行判断,属于“热点代码”(多次调用的方法,或循环等), 所以JIT技术会发生作用。
这也告诉我们,以后写Java程序的时候,要注意JIT技术是否会被应用到,改一下程序的结构,可能会为程序性能带来很大提高。比如在这个例子中,仅仅是对调了一下 if 条件句中两边语句的顺序,程序性能就发生了很大变化。