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 條件句中兩邊語句的順序,程序性能就發生了很大變化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章