leecode 兩數之和

題目介紹

在這裏插入圖片描述

解決方法

暴力破解

直接使用循環來進行解題

用python實現

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        for i in range(len(nums)):
            for j in range(len(nums)):
                if(nums[i]+nums[j]==target):
                    return [i,j]
        

優化
找出nums[i],創建一個新的數組儲存nums前i各元素tump=nums[:i],再在tump中遍歷尋找是否存在值爲target-nums[i]的元素,如果存在將該元素的座標賦值給j結束循環
最後返回 [j,i] 注意j在i前面

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        for i in range(len(nums)):
            tump=nums[:i]
            if((target-nums[i])in tump):
                j=tump.index(target-nums[i])
                break
        
        return [j,i]

執行用時344ms

哈希表法

首先介紹:

enumerate() 函數用於將一個可遍歷的數據對象(如列表、元組或字符串)組合爲一個索引序列,同時列出數據和數據下標,一般用在 for 循環當中。

語法:
enumerate(sequence, [start=0])
sequence – 一個序列、迭代器或其他支持迭代對象。
start – 下標起始位置。

舉例:

a=[1,2,3,4]
for i,a in enumerate(a):
    print(i,a)#i表示數據下標,a返回列表數據
# 0 1
# 1 2
# 2 3
# 3 4

代碼實現:

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        hashmap={}#創建一個空字典
        for i,value in enumerate(nums):#遍歷列表,value返回列表數據,i返回數據座標
            #查找hashmap字典中的key是否有target-value
            if target-value in hashmap:
                #如果存在返回target-value對應的值與 i
                return [hashmap.get(target-value),i]    
            hashmap[value]=i#如果不存在,將 "value":"i" 添加到hashmap字典中

兩遍哈希表

哈希表最大的優點,就是把數據的存儲和查找消耗的時間大大降低,幾乎可以看成是常數時間;而代價僅僅是消耗比較多的內存。然而在當前可利用內存越來越多的情況下,用空間換時間的做法是值得的。另外,編碼比較容易也是它的特點之一。

在第一次迭代,將每個元素和其索引值添加到字典中。然後在第二次迭代中,檢查每個元素對應的目標元素的索引值是否存在(hashmap.get(target-value)),但是目標元素的索引值不能是元素自身(hashmap.get(target-value)!=i)

#兩次遍歷哈希表
def twoSum4(nums,target):
    hashmap={}
    for i,value in enumerate(nums):
        hashmap[value]=i
    for i,value in enumerate(nums):
        if (hashmap.get(target-value))and(hashmap.get(target-value)!=i):
            return [i,hashmap.get(target-value)]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章