Leetcode_01【兩數之和】
阿新 • • 發佈:2019-12-06
文章目錄:
- 題目
- 指令碼一及註釋
- 指令碼邏輯
- 指令碼二及註釋
- 指令碼邏輯
題目:
給定一個整數陣列 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) #呼叫類中的方法,由於此方法會返回值,所以將值打印出來即可
【處理邏輯】
- 此指令碼處理邏輯是生成一個新的資料記錄處即字典,用於儲存已經遍歷的列表元素的索引號及元素值
- 由於列表遍歷過程中是與字典進行遍歷的,所以字典的鍵值是不會重複的
- 通俗來講就是:一開始桶子是空的,不斷拿資料與桶子裡的資料進行比對,如果沒有找到比對目標的值會放到桶子裡,然後進行下一次的比對
指令碼二及步驟註釋
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) #返回兩數的索引號
指令碼邏輯
- 此指令碼是使用逼近的思想,通俗來講就是:用第一個數與列表中其餘的值進行求和,檢視是否與目標值一致
- 若一致,則求出兩值得索引號即可
- 若不一致,丟棄第一個值,使用第二個值與剩餘得值進行比較(不包括第一個值),直到遍歷所有值或者遇到合適值為止
&n