题目:​​原题链接​​(简单)

解法

时间复杂度

空间复杂度

执行用时

Ans 1 (Python)

64ms (54.59%)

Ans 2 (Python)

36ms (98.26%)

Ans 3 (Python)


LeetCode的Python执行用时随缘,只要时间复杂度没有明显差异,执行用时一般都在同一个量级,仅作参考意义。


解法一(双指针):

def findSolution(self, customfunction: 'CustomFunction', z: int) -> List[List[int]]:
idx1 = 1
idx2 = 1000
ans = []
while idx1 <= 1000 and idx2 >= 1:
if customfunction.f(idx1, idx2) < z:
idx1 += 1
elif customfunction.f(idx1, idx2) > z:
idx2 -= 1
else:
ans.append([idx1, idx2])
idx1 += 1
idx2 -= 1
return ans

解法二(双指针+二分法):

def findSolution(self, customfunction: 'CustomFunction', z: int) -> List[List[int]]:
idx1 = 1
idx2 = 1000
ans = []
while idx1 <= 1000 and idx2 >= 1:
if customfunction.f(idx1, idx2) < z:
mid = (idx1 + idx2) // 2
if customfunction.f(mid, idx2) < z:
idx1 = max(mid, idx1 + 1)
else:
idx1 += 1
elif customfunction.f(idx1, idx2) > z:
mid = (idx1 + idx2) // 2
if customfunction.f(idx1, mid) > z:
idx2 = min(mid, idx2 - 1)
else:
idx2 -= 1
else:
ans.append([idx1, idx2])
idx1 += 1
idx2 -= 1
return ans