描述
给定一个升序数组s和一个目标数target,求解出数组中是否存在两数之和等于target
例如:
给定s:[1,2,3,4,5],target = 4
返回:True
给定s:[1,2,3,4,5],target = 100
返回:False
思路
1.暴力求解
双循环。。
2.双指针
设定一个首指针和尾指针,分别从头和尾遍历求和,当和大于target时,尾指针-1,当和大于target时,首指针+1。
code
def test(self,s,target):
if not s:
return False
for i in range(len(s)):
for j in range(i,len(s)):
if s[i] + s[j] == target:
return True
return False
时间复杂度:O(N^2)
def test2(self,s,target):
if not s:
return False
i,j = 0,len(s)-1
while i < j:
if s[i] + s[j] > target:
j -= 1
if s[i] + s[j] < target:
i += 1
if s[i] + s[j] == target:
return True
return False
时间复杂度:O(N)