[東哥的leetcode刷題日記] leetcode 1 :Two Sum

leetcode 1 :Two Sum


題目鏈接: https://leetcode-cn.com/problems/two-sum/
難度: 簡單
歸類 : 數組操作,hashmap

題目

給定一個整數數組 nums和一個目標值 target,請你在該數組中找出和爲目標值的那兩個整數,並返回他們的數組下標。你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素不能使用兩遍。

示例:

給定 nums = [2, 7, 11, 15], target = 9
因爲 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]


解法

主要使用c++和python等兩種語言進行了解答,以及經典題解和嘗試改進的最優/最簡潔解法。


個人解法

C++解法

//c++解法
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        map<int, int> hashmap;
        vector<int> res(2,0);
        for(int i = 0; i < nums.size(); i++){
            if(hashmap.find(target - nums[i]) != hashmap.end()){
                res[0] = hashmap[target - nums[i]];
                res[1] = i;
                return res;
            }else{
                hashmap[nums[i]] = i;
            }
        }
        return res;
    }
};

時間複雜度: O(N)
空間複雜度: O(N)
提交結果:
執行用時 :16 ms, 在所有 C++ 提交中擊敗了69.92%的用戶
內存消耗 :8 MB, 在所有 C++ 提交中擊敗了100.00%的用戶

python解法

#python解法
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        res = [0] * 2
        dict_hash = {}
        for i in range(len(nums)):
            if (target - nums[i]) in dict_hash:
                res[0] = dict_hash.get(target - nums[i])
                res[1] = i
                return res
            else:
                dict_hash.update({nums[i]: i})
        return res

時間複雜度: O(N)
空間複雜度: O(N)
提交結果:
執行用時 :64 ms, 在所有 Python3 提交中擊敗了60.83%的用戶
內存消耗 :15.1 MB, 在所有 Python3 提交中擊敗了5.48%的用戶


題解優解

此題有三種解法:
暴力法(O(N^2),O(1)),兩遍哈希表(O(N),O(N)),一遍哈希表(O(N),O(N))

附上一個簡潔的python版本。

#python解法
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        """這樣寫更直觀,遍歷列表同時查字典"""
        dct = {}
        for i, n in enumerate(nums):
            if target - n in dct:
                return [dct[target - n], i]
            dct[n] = i

時間複雜度: O(N)
空間複雜度: O(N)
提交結果:
執行用時 :80 ms, 在所有 Python3 提交中擊敗了49.78%的用戶
內存消耗 :15.1 MB, 在所有 Python3 提交中擊敗了5.48%的用戶


嘗試改進的最優解法

本題較爲簡單,無更優解法

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