leetcode第1題倆數之和使用哈希表可以減少時間消耗

上班摸魚刷題玩,剛好試試leetcode,第一題太簡單了
給定一個整數數組和一個目標值,找出數組中和爲目標值的兩個數。

你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。

示例:

給定 nums = [2, 7, 11, 15], target = 9

因爲 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
然後我就直接暴力倆重for循環過了,然後看了一下題解發現官方題解裏的哈希表非常好,在查詢的時候不再使用for,而是改爲使用查找哈希表,這樣查找時間近似的就是O(1),倆重循環的一重直接變爲O(1)那麼整體的時間複雜度就變爲了O(n)。
試了下果然快了好多,從29ms變爲5ms,給我很大啓發,雖然這個題非常簡單,但以後遇到一些困難的問題時,通過合適的哈希能極大地達到以空間換時間的效果,這是一種不錯的思路。最後貼一下哈希的方式,雖然題解裏有

class Solution {
    public int[] twoSum(int[] nums, int target) {
       Map<Integer,Integer> map = new HashMap<>();
        for(int i=0;i<nums.length;i++){
            map.put(nums[i],i);
        }
        for(int i=0;i<nums.length;i++){
            int num = target-nums[i];
            if(map.containsKey(num)&&map.get(num) != i){
                return new int[] {i,map.get(num)};
            }
        }
        return  new int[] {0,0};
    }
    
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章