LeetCode第1题(two sum) 暴力法性能优化

最近开始刷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 条件句中两边语句的顺序,程序性能就发生了很大变化。

苟利国家生死以, 岂因祸福避趋之
原文地址:https://www.cnblogs.com/chintsai/p/11829232.html