1. 程式人生 > >Leetcode_01【兩數之和】

Leetcode_01【兩數之和】

文章目錄:

  •  題目
  • 指令碼一及註釋
    • 指令碼邏輯
  • 指令碼二及註釋
    • 指令碼邏輯  

 

題目:

給定一個整數陣列 nums 和一個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。

你可以假設每種輸入只會對應一個答案。但是,你不能重複利用這個陣列中同樣的元素。

示例:

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

因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

 


指令碼一及步驟註釋

class Solution:                       #定義一個名為Solution的類
    def twoSum(self, nums: List[int], target: int) -> List[int]:      #此處是leetcode給定的輸出格式
        zidian = {}                                 #定義一個空字典
        for i,j in enumerate(nums):          #使用列舉的方法enumerate對列表nums的元素進行遍歷,i為列表元素的索引號,j為索引號為i對應的列表元素
            k = target - j                #使用和值減去其中一個加數得到另一個加數
            if k in zidian:               #對字典的鍵進行遍歷,檢視是否有鍵的值為k
                return(i,zidian.get(k))        #如果有鍵的值為k,則返回遍歷列表當前元素的索引號及字典中鍵為k所對應的值
            zidian[j] = i                 #如果沒有在字典中找到鍵的值為k的情況,則把遍歷列表的當前元素的元素值作為鍵,索引號為值 加入到字典中
result = Solution()                    #建立一個Solution的類
print(result.twoSum)                   #呼叫類中的方法,由於此方法會返回值,所以將值打印出來即可

【處理邏輯】

  1. 此指令碼處理邏輯是生成一個新的資料記錄處即字典,用於儲存已經遍歷的列表元素的索引號及元素值
  2. 由於列表遍歷過程中是與字典進行遍歷的,所以字典的鍵值是不會重複的
  3. 通俗來講就是:一開始桶子是空的,不斷拿資料與桶子裡的資料進行比對,如果沒有找到比對目標的值會放到桶子裡,然後進行下一次的比對

 

指令碼二及步驟註釋

class Solution:                                   #同上
    def twoSum(self, nums: List[int], target: int) -> List[int]:          #同上
        for i in range(0,len(nums)):                #從0到列表元素個數組成的數列進行遍歷  
            aa = nums[i]                                       #獲取一個列表元素
            bb = target - aa                                   #求和值的另一個數值
            for j in range(i+1,len(nums)):                     #對列表剩餘元素進行不重複遍歷
                if bb == nums[j]:                              #如果存在與另一個數值相等的數
                    return(i,j)                                #返回兩數的索引號

指令碼邏輯

  1.  此指令碼是使用逼近的思想,通俗來講就是:用第一個數與列表中其餘的值進行求和,檢視是否與目標值一致
  2. 若一致,則求出兩值得索引號即可
  3. 若不一致,丟棄第一個值,使用第二個值與剩餘得值進行比較(不包括第一個值),直到遍歷所有值或者遇到合適值為止

&n