暴力搜索3次方的時間復雜度,大抵超時
遇到不會先排序
排序+雙指針
上題解
照做
class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:res=[]n=len(nums)#排序降低復雜度nums.sort()k=0#留兩個位置給雙指針i,jfor k in range(n-2):if nums[k]>0:break#比較其和前一個元素是否相等,相等則跳過(防止重復)if k>0 and nums[k]==nums[k-1]:continuei=k+1j=n-1while i<j:sum=nums[k]+nums[i]+nums[j]if sum<0:i+=1#同樣的結果了while i<j and nums[i]==nums[i-1]:i+=1elif sum>0:j-=1#一樣while i<j and nums[j]==nums[j+1]:j-=1else:res.append([nums[k],nums[i],nums[j]])i+=1j-=1#samewhile i<j and nums[i]==nums[i-1]:i+=1while i<j and nums[j]==nums[j+1]:j-=1return res
過?
?
總結:
- 數組排序
- 固定一個數,開始雙指針,第一個指針緊隨其后,第二個指針逆序
- 剪枝包括與前面的元素相比有沒有相同,相同則跳過
- 每次移動i/j都可以考慮剛剛那步的剪枝?
?
?