相向双指针
解决两数之和,三数之和问题。主要针对有序数组使用。
两数之和
class Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
left=0
right=len(numbers)-1
while left<right:
k=numbers[left]+numbers[right]
if k==target:
return [left+1,right+1]
elif k>target:
right-=1
else:
left+=1
三数之和
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
# 排序
nums.sort()
ans=[]
n=len(nums)
for i in range(n-2):
if i>0 and nums[i]==nums[i-1]:
continue
if nums[i]+nums[i+1]+nums[i+2]>0:
break
if nums[i]+nums[-2]+nums[-1]<0:
continue
j=i+1
k=n-1
while j<k:
target=nums[i]+nums[j]+nums[k]
if target>0:
k-=1
elif target<0:
j+=1
else:
ans.append([nums[i],nums[j],nums[k]])
j+=1
while j<k and nums[j]==nums[j-1]:
j+=1
k-=1
while k>j and nums[k]==nums[k+1]:
k-=1
return ans
Comments NOTHING