1. 程式人生 > 其它 >【初級演算法】兩數之和 2021.8.11

【初級演算法】兩數之和 2021.8.11

【題目】兩數之和

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

你可以假設每種輸入只會對應一個答案。但是,陣列中同一個元素在答案裡不能重複出現。

你可以按任意順序返回答案。

示例 1:

輸入:nums = [2,7,11,15], target = 9
輸出:[0,1]
解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:

輸入:nums = [3,2,4], target = 6
輸出:[1,2]
示例 3:

輸入:nums = [3,3], target = 6
輸出:[0,1]

提示:

2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
只會存在一個有效答案
進階:你可以想出一個時間複雜度小於 O(n2) 的演算法嗎?

作者:力扣 (LeetCode)
連結:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2jrse/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

1.0 自己做

 1 class Solution(object):
 2     def
twoSum(self, nums, target): 3 """ 4 :type nums: List[int] 5 :type target: int 6 :rtype: List[int] 7 """ 8 length_nums = len(nums) 9 for i in range(length_nums): 10 numss = nums[:] 11 remainder = target - nums[i] 12
del numss[i] 13 if remainder in numss: 14 j = numss.index(remainder) 15 ret = [i, j+1] 16 return ret

雖然做出來很高興,但看看結果,感覺自己果然還很菜......

思路:開始想用前兩天的方法一個一個遍歷,但想想果然還是應該用些簡單的方法。於是就想依次從nums中提取元素,再計算 target-該元素=得到的值,在nums中是否能找到,能找到就提取出索引return。

又學習到了:

① del temp[i]  用del刪除列表中的值
https://www.cnblogs.com/hanmk/p/13799062.html

② l1.index(1) 查詢列表某值對應的索引
https://blog.csdn.net/xidianbaby/article/details/88712235

③ nums2=nums1[:] 將一個列表的值複製到另一個列表備用,互不影響
https://blog.csdn.net/weixin_43249038/article/details/107947532

體會總結:在前面的一段程式碼中本來加入了 if numss[i] <= target:

來判斷數的大小,後來發現原來nums中和target的值都可以為負為正,如果加上這句話就還需要新增上更多的句子來判斷正負,不如直接去掉的好。

 這一次比之前的思路更加靈活了,自己有意識地在尋找更加便利的方法,雖然還是不太便利,但相比之前有很大的進步。

 這段程式碼從構思到寫完,我感覺思路順暢了許多,沒有那麼艱難了,可能也更快了(?),沒有計時。就醬。

2.0

待補充待補充