Python三數之和的實現方式
三數之和題目描述
給你一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,
使得 a + b + c = 0 ?請你找出所有滿足條件且不重復的三元組。
答案中不允許包含重復的三元組。
示例:
給定數組 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合為:
[ ? [-1, 0, 1], ? [-1, -1, 2] ]
思路
1. 首先將數組排序,可以利用Python內置函數,也可以利用另外定義排序算法。
2. 應用雙指針算法。固定第一個數,索引為i,遍歷整個數組,第一個數也是三個數中最小的數,然后在該數右面設置左右兩個指針l和r,l=i+1,r=len(nums)-1,
3. 判斷這三個索引指向的元素和與0的大小關系。
和>0,右指針左移一位;和<0,左指針右移一位。
由于要避免重復的三元組,所以移動左右指針的時候要跳過相鄰的所有相等的nums[i]。
Python3代碼
#導入計算時間的包,調用系統(tǒng)時間 from time import * #初始時間 t1 = time() def threeSum(nums): nums.sort() n = len(nums) res = [] for i in range(n): '''如果相鄰的兩個數相等,跳過,避免重復''' if i > 0 and nums[i] == nums[i-1]: continue l, r = i+1, n-1 while l < r: if nums[i] + nums[l] + nums[r]>0: r -= 1 while nums[r+1] == nums[r]: r -= 1 elif nums[i] + nums[l] + nums[r]<0: l += 1 while nums[l-1] == nums[l]: l += 1 else: res.append([nums[i],nums[l],nums[r]]) l += 1 r -= 1 while nums[l] == nums[l - 1]: l += 1 while nums[r] == nums[r + 1]: r -= 1 return res if __name__ == '__main__': nums = [-1,0,1,2,-1,-4] print(threeSum(nums)) #結束時間 t2 = time() #運行時間 run_time = t2 - t1 print(run_time)
運行結果:
[[-1, -1, 2], [-1, 0, 1]]
#運行時間
0.0010113716125488281
以上代碼有一些思想錯誤:
遺漏了如果三個數全部大于0,則退出循環(huán),因為沒有滿足條件的結果。
沒有嚴格判斷每一次的l<r的條件。
修正后的代碼:
from time import * t1 = time() def threeSum(nums): nums.sort() n = len(nums) res = [] for i in range(n-2): if nums[i] > 0:break '''如果相鄰的兩個數相等,跳過,避免重復''' if i > 0 and nums[i] == nums[i-1]: continue l, r = i+1, n-1 while l < r: if nums[i] + nums[l] + nums[r]>0: r -= 1 while l < r and nums[r-1] == nums[r]: r -= 1 elif nums[i] + nums[l] + nums[r]<0: l += 1 while l < r and nums[l] == nums[l-1]: l += 1 else: res.append([nums[i],nums[l],nums[r]]) l += 1 r -= 1 while l < r and nums[l] == nums[l - 1]: l += 1 while l < r and nums[r] == nums[r + 1]: r -= 1 return res if __name__ == '__main__': nums = [-2,-3,0,0,-2] print(threeSum(nums)) t2 = time() run_time = t2 - t1 print(run_time)
結果:
[]
#時間
0.0
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python打開指定網頁使用requests模塊爬蟲示例詳解
這篇文章主要介紹了Python打開指定網頁使用requests模塊爬蟲的示例,Python?requests是一個常用的HTTP請求庫,可以方便地向網站發(fā)送HTTP請求,并獲取響應結果,requests模塊比urllib模塊更簡潔,感興趣的朋友可以參考下2024-02-02