题目:原题链接(简单)

解法 时间复杂度 空间复杂度 执行用时
Ans 1 (Python) O ( N ) O(N) O(N) O ( 1 ) O(1) O(1) 64ms (54.59%)
Ans 2 (Python) O ( l o g N ) O(logN) O(logN) O ( 1 ) O(1) O(1) 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